2011-10-24 55 views
1

您是否有任何想法在asp.net.its中調用http(不是https)Web服務(使用用戶名和密碼進行身份驗證)*,而不是SOAP Web服務。 Web服務使用java開發。所以wsdl.exe不會工作,不管是通過引用調用。如何在Asp.Net中調用基於HTTP的Java Web服務(Servlet)。

這是SOAP UI提取SOAP信封

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ak="http://linkaddress"> 
    <soapenv:Header> 
     <ak:password>?</ak:password> 
     <ak:username>?</ak:username> 
    </soapenv:Header> 
    <soapenv:Body> 
     <ak:Vehicle> 
      <chassisNo>?</chassisNo> 
      <plateNo>?</plateNo> 
      <plateCode>?</plateCode> 
     </ak:Vehicle> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

我從我的c#應用程序中使用基於Java的Web服務,只需向我的項目添加引用即可正常工作。不知道爲什麼這不適合你。 –

+0

好友其HTTP服務不是https。對於https服務,您可以做到這一點,但對於80年代後期託管的非常古老的原始Web服務,您無法這麼做。 –

+0

嚴,沒有。你是錯的。我整天使用基於Java的HTTP Web服務。你需要做一些閱讀和學習。 –

回答

2

最後,我解決我的問題:

string sResponse = string.Empty; 
try { 
    Uri uri = new Uri(sFetchURL); 
    if (uri.Scheme == Uri.UriSchemeHttp) { 

     HttpWebRequest request = null; 
     request = (HttpWebRequest) HttpWebRequest.Create(uri); 

     request.Method = WebRequestMethods.Http.Get; 
     request.ContentType = "text/xml;charset=\"utf-8\""; 

     string strSOAPRequestBody = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ak=\"http://Link.JavaService\">" + 
     "<SOAP-ENV:Header>" + 
      "<ak:password>" + myPassword + "</ak:password>" + 
      "<ak:username>" + myUserName + "</ak:username>" + 
     "</SOAP-ENV:Header>" + 
     "<SOAP-ENV:Body>" + 
      "<ak:Vehicle>" + 
      "<chassisNo>" + sChessisNo + "</chassisNo>" + 
      "<plateNo>" + sPlateNo + "</plateNo>" + 
      "<plateCode>" + sPlateCode + "</plateCode>" + 
      "</ak:passingVehicleTest>" + 
     "</SOAP-ENV:Body>" + 
     "</SOAP-ENV:Envelope>"; 

     request.Method = "POST"; 
     request.ContentType = "application/soap-xml; charset=UTF-8"; 
     request.Headers.Add("SOAPAction:\"\"");//please check RAW data In SOAP UI 

     request.ContentLength = strSOAPRequestBody.Length; 
     System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(
       request.GetRequestStream()); 
     streamWriter.Write(strSOAPRequestBody); 
     streamWriter.Close(); 
     System.IO.StreamReader streamReader = new System.IO.StreamReader(
       request.GetResponse().GetResponseStream()); 

     while (!streamReader.EndOfStream) 
      sResponse += streamReader.ReadLine(); 
    } 

} catch (WebException err) { 
    HttpWebResponse httpResponse = null; 
    httpResponse = (HttpWebResponse) err.Response; 
    Stream baseStream = httpResponse.GetResponseStream(); 

    System.IO.StreamReader streamReader2 = new System.IO.StreamReader(
      baseStream); 
    while (!streamReader2.EndOfStream) 
     sResponse += streamReader2.ReadLine(); 
} 

return sResponse; 
0

嘗試使用HttpWebRequest

string url = "serviceurl"; 
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest 
     .Create(url); 
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request 
     .GetResponse(); 

if (response.StatusCode == System.Net.HttpStatusCode.OK) { 
    System.IO.Stream receiveStream = response.GetResponseStream(); 
    System.IO.StreamReader readStream = null; 

    if (response.CharacterSet == null) 
     readStream = new System.IO.StreamReader(receiveStream); 
    else 
     readStream = new System.IO.StreamReader(receiveStream, 

     System.Text.Encoding.GetEncoding(response.CharacterSet)); 

    string result = readStream.ReadToEnd(); 
    response.Close(); 
    readStream.Close(); 
} 
3

使用添加Web服務引用而不是添加網頁來自Visual Studio的參考文獻

+0

如果將來你面臨的問題,請參閱我剛剛發佈的解決方案。 –

+1

你的解決方案不是最好的Rajnish .. – StefanE

+1

如果你有任何最好的解決方案PLZ顯示我這將是一個驚喜.. –

相關問題