[英]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.