簡體   English   中英

Windows服務中的SOAP請求失敗

[英]SOAP Request failing from Windows Service

我正在使用以下代碼創建SOAP請求

    public static string SubmitSoapRequest(string url,
                                                        string ns,
                                                        string operation,
                                                        string requestXml,
                                                        bool responseNodeOnly)
    {
        // make sure the namespace has a trailing slash
        ns = ns.TrimEnd('/') + '/';

        // format soap request
        string soap = string.Format(SOAP_REQUEST_XML, ns, operation, requestXml);

        // format soap action
        string soapAction = string.Format(@"{0}{1}", ns, operation);

        // initialize web request
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

        // add header and other soap params
        req.Headers.Add("SOAPAction", soapAction);
        req.ContentType = @"text/xml;charset=""utf-8""";
        req.Accept = "text/xml";
        req.Method = "POST";

        // make soap request
        using (Stream s = req.GetRequestStream())
        using (StreamWriter sw = new StreamWriter(s))
            sw.Write(soap);

        // get response from remote web-service
        WebResponse response = req.GetResponse();

從已編譯的Windows應用程序運行時,此方法工作正常,但從Windows服務調用時,此方法將失敗。 從該異常中捕獲到“ 500 Internal Server Error”。

是否有任何原因為什么通過Windows服務運行會導致此問題?

在此先感謝您的幫助/建議

在沒有看到服務發生什么情況的情況下,我最初的猜測是它與憑據有關。 遠程服務是否需要特定的憑據才能訪問? 當您將代碼作為Windows應用程序運行時,傳遞給該服務的憑據可能是您的網絡憑據。 但服務正在傳遞其憑據(網絡服務)。

在提出服務請求之前,您可能需要在請求中設置適當的憑據。 這是我從MSDN下車的一個示例:

CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(new Uri("http://foo.com/"),"Basic", new NetworkCredential("user1","passwd1","domain1"));
WebRequest myWebRequest = WebRequest.Create("http://foo.com");
NetworkCredential myCredential = myCredentialCache.GetCredential(new Uri("http://foo.com"),"Basic");
myWebRequest.Credentials = myCredential; 
WebResponse myWebResponse = myWebRequest.GetResponse();

在沒有看到服務的情況下,將首先根據您描述的情況進行調查。 我希望這有幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM