Hallo Ich verwende ein HttpModule, um WebAPI aufzurufen. Derzeit ist die Lösung arbeitet lokal im System aber sobald ich den Code in Server veröffentlicht, schlägt es die API call.Here ist der Beispielcode zu machen:Web-API-Aufruf mit IHTTP-Modul
public class AppModule: IHttpModule
{
public void Init(HttpApplication httpApp)
{
httpApp.BeginRequest += OnBeginRequest;
httpApp.EndRequest += OnEndRequest;
httpApp.PreSendRequestHeaders += OnHeaderSent;
}
public void OnBeginRequest(Object sender, EventArgs e)
{
try
{
var httpApp = (HttpApplication)sender;
if (httpApp.Request.Path.StartsWith("/media/")) return;
string a = httpApp.Request.ServerVariables["ID"];
if (String.IsNullOrEmpty(a))
{
a = System.Configuration.ConfigurationManager.AppSettings["ID"];
}
var absolutepath = httpApp.Request.Url.AbsolutePath;
var values = new Dictionary<string, object>
{
{ "ID", a },
{ "Browser",httpApp.Request.Browser["Type"] },
{ "Url",httpApp.Request.Url.Scheme + "://" + httpApp.Request.Url.Authority + absolutepath},
{ "OperatingSys",httpApp.Request.Headers["User-Agent"] },
{ "IPAddss",httpApp.Request.UserHostAddress },
{ "LDate",System.DateTime.Now.ToString() },
};
var serializer = new JavaScriptSerializer();
var appData = serializer.Deserialize<DataVO>(serializer.Serialize(values));
AppModuleVO objAppModuleVO = new AppModuleVO();
//AppModuleVo has all the properties.
objAppModuleVO.WebUrl = System.Configuration.ConfigurationManager.AppSettings["APIURL"] + MethodCall;
objAppModuleVO.objDataVo = appData;
ThreadPool.QueueUserWorkItem(new WaitCallback(HandlePostRequest), objAppModuleVO);
}
catch (Exception ex)
{
}
}
}
ich das gleiche in Web.Config registriert haben als
<system.web>
<httpModules>
<add name="AppModule" type="Fighter.Modules.AppModule"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="AppModule" type="Fighter.Modules.AppModule"/>
</modules>
</system.webServer>
ich bin nicht sicher, ob Änderungen oder Registrierung in dem IIS-Server nach der Veröffentlichung des Codes in Server vorgenommen werden muss. Hinweis: Ich habe auch die API im Server bereitgestellt und den richtigen Pfad bereitgestellt und da andere Methoden dieselbe API aufrufen können, die ausgeschlossen ist. Bitte helfen Sie. Das Problem scheint wegen der IIS derzeit bin ich benutze IIS 7.0 in Managed Pipeline-Modus als CLASSIC .Any Workarounds für dieses Problem.
Was scheitert? Es gibt einen Haken. Geht es dort hin? – Asken
@Asken es funktioniert perfekt, wenn ich die Lösung lokal ausführen das Problem kommt nach der Veröffentlichung des Codes auf dem Server. –
Brauchen mehr Daten ... es kann alles sein. Sie müssen sich die Protokolle ansehen. Sie könnten auch versuchen, ein einfaches Modul zu erstellen, das etwas wie eine Zeichenfolge zurückgibt, um zu sehen, ob es funktioniert. Wenn ein Anruf bei externen Websites erfolgt, müssen Sie möglicherweise dafür sorgen, dass Sie dazu berechtigt sind. Wenn Sie die Kontrolle über den Server haben, können Sie versuchen, ' ' zu setzen. –
Asken