2010-12-30 1 views
6

여기에 바퀴가 새롭게 등장한 것으로 알고 있지만 http/soap/xml 및 웹 메시지를 통해 웹 서비스와 통신해야합니다. 그 이유는 작업을 위해 제 3 자 웹 서비스와 통신해야하지만, WSDL 또는 그 밖의 것이 잘못되어 .NET 마법사를 사용하여 WSDL에 연결할 때 작동하지 않기 때문입니다..NET을 사용하여 프로그래밍 방식으로 C#의 웹 서비스에 정보를 보내는 방법은 무엇입니까?

그럼, 아무도 나에게 프로세스/간단한 예제/etc를 줄 수 있습니까? 이 작업을 수행하는 방법 또는 누군가가 나에게 설명하는 어딘가에 링크를 제공 할 수 있습니까? 나는 웹 요청과 응답에 정통하지 않다.

요청을 구성하고 보내려면 어떻게해야합니까? 어떻게 응답을 구문 분석합니까?

다음은 간단한 웹 서비스의 코드입니다. 이 .asmx의 주소가 "http://www.mwebb.com/TestSimpleService.asmx"입니다 척 :

using System; 
using System.Data; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 

namespace TestSimpleService 
{ 
    [WebService] 
    public class Soap : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public string SayHello(string name) 
     { 
      return "Hello " + name + "!"; 
     } 
    } 
} 

가 어떻게이 방법을 부를 것이다

?

도움을 주시면 감사하겠습니다.

내가 정말 그냥 웹 서비스로 데이터를 전송하는 방법을 알고 싶어요

편집 할 수 있습니다. 모든 메소드/SOAP 액션/URL 데이터를 얻을 수 있으며 응답 데이터를 구문 분석 할 수 있습니다. 나는 어떤 물체를 사용해야하는지, 어떻게 사용하는지 모른다.

누군가가 파이썬에서 SUDS와 같은 간단한 .NET 비누 클라이언트를 알고 있다면 도움이 될 것입니다.

+0

당신은 VS 내에서 WSDL을 소비 할 필요가 없습니다 @ 마이크; 최소한 브라우저를 통해 WSDL에 액세스하여 WSDL을 다운로드 할 수 있다면 wsdl.exe http://msdn.microsoft.com/en-us/library/7h3ystb6(v=VS.100).aspx를 사용할 수 있습니다. 로컬 디스크 –

+0

웹 서비스를 소비 할 때 VS가 필요없는 접근 방식이 필요하다면 : http://notepad-webservices.blogspot.com/2006/04/web-services-no-source-code-on-server.html wsdl –

+0

WSDL에 문제가 있으므로 실제로 사용할 수 없습니다. .NET에서 http/soap 요청/응답 객체를 사용하여 데이터를 보내고받는 방법이 있어야합니다. 파이썬에서 Suds처럼 이것을하기위한 간단한 라이브러리가 있어야합니다. –

답변

6

직접 의사 소통을하려면, 내가 사용으로 보이는 것 HttpWebRequest를 궁극적으로 웹 서비스 호출는 HTTP POST를 사용하여 단지 XML을 전송한다. 한 가지 방법 .NET 프로그래밍 방식을 문의하기 전에 외부 웹 서비스를 테스트하는 방법으로 http://geekswithblogs.net/marcel/archive/2007/03/26/109886.aspx

당신이 필요를 생각 정확한 XML을 생성 SOAPUI 같은 테스트 도구를 사용하는 것입니다 :

다음 링크는 몇 가지 예제를 가지고 웹 서비스에 게시하고

는 그런 다음 해당 그물

편집 개발할 수있는 도구를 사용하여 수동으로 보낼 - 난 당신의 예를 들어 서비스 (사용 SOAP1.2)를 호출하는 노크 빠른 예입니다 여기에 기반 위의 링크 :

 { 
      string soap = @"<?xml version=""1.0"" encoding=""utf-8""?> 
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
    xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
    xmlns:soap=""http://www.w3.org/2003/05/soap-envelope""> 
    <soap:Body> 
    <SayHello xmlns=""http://tempuri.org/""> 
     <name>My Name Here</name> 
    </SayHello> 
    </soap:Body> 
</soap:Envelope>"; 

      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:2439/Soap.asmx"); 
      req.ContentType = "application/soap+xml;"; 
      req.Method = "POST"; 

      using (Stream stm = req.GetRequestStream()) 
      { 
       using (StreamWriter stmw = new StreamWriter(stm)) 
       { 
        stmw.Write(soap); 
       } 
      } 

      WebResponse response = req.GetResponse(); 
      Stream responseStream = response.GetResponseStream(); 

      // Do whatever you need with the response 
      Byte[] myData = ReadFully(responseStream); 
      string s = System.Text.ASCIIEncoding.ASCII.GetString(myData); 
     } 

ReadFully 메소드는 http://www.yoda.arachsys.com/csharp/readbinary.html에서 비롯되었으며 Jon Skeet에서 비롯된 것으로 보입니다.

+0

응답 주위에'사용 중 '문이 있습니까? –

0

즉석에서 바인딩을 만들 수있는 XML-RPC.NET이 있습니다.

예. (자신의 웹 사이트에서 예) :

[XmlRpcUrl("http://betty.userland.com/RPC2")] 
public interface IStateName : IXmlRpcProxy 
{ 
    [XmlRpcMethod("examples.getStateName")] 
    string GetStateName(int stateNumber); 
} 
+1

나는 그것을 밖으로 시도 할 것이다. –

+0

-1 : XML 서비스가 아닌 SOAP 서비스입니다. –

+0

오, 차이가 있다는 것을 깨닫지 못했습니다. 이 주제에 대해 내가 얼마나 잘 알고 있는지 보여줍니다 :) Yah, 나는 그것을 시도했지만 효과가 없었습니다. 맞춰봐. –

0

귀하의 서비스가 귀하의 예처럼 간단하다면 "서비스 참조 추가"를 사용하고 프록시를 사용하십시오.

그래도 작동하지 않으면 명령 줄 svcutil.exe 프로그램을 사용하여 인쇄 한 오류 메시지를 게시하십시오.

WSDL을 사용하지 마십시오.당신이 선택의 여지가 없다면 EXE.

1

선택한 대답의 코드가 저에게 효과적이지 않았습니다. 헤더에 SOAPAction을 추가하고 ContentType을 변경해야했습니다. 여기

은 전체 코드입니다 :

var strRequest = @"<soap12:Envelope> 
        ... 
        </soap12:Envelope>"; 

string webServiceUrl = "http://localhost:8080/AccontService.svc"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webServiceUrl); 

request.Method = "POST"; 
request.ContentType = "text/xml;charset=UTF-8";   
request.Accept = "text/xml"; 
request.Headers.Add("SOAPAction", "http://tempuri.org/IAccountService/UpdateAccount"); 

byte[] data = Encoding.UTF8.GetBytes(strRequest); 

request.ContentLength = data.Length; 
Stream requestStream = request.GetRequestStream(); 
requestStream.Write(data, 0, data.Length); 
requestStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
string responseXmlString = reader.ReadToEnd(); 

return new HttpResponseMessage() 
{ 
    Content = new StringContent(responseXmlString, Encoding.UTF8, "application/xml") 
}; 
관련 문제