2010-07-29 157 views
1

失敗我用下面的代碼SOAP請求從Windows服務

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應用程序運行時,該工作正常創建SOAP請求,但是從Windows服務調用時失敗。從異常中捕獲'500內部服務器錯誤'。

是否有任何理由爲什麼通過Windows服務運行可能導致這種情況?

在此先感謝您的幫助/諮詢

回答

0

沒有看到發生了什麼事情的服務,我最初的猜測是,它的憑據相關。遠程服務是否需要特定的訪問憑據?當您將代碼作爲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(); 

沒有看到該服務,這將是一些根據您所描述的情況初步調查。我希望這有幫助!!