2013-06-23 2 views
0

사용자 지정 끝점으로 WCF 웹 서비스가 있습니다. 클라이언트 응용 프로그램에서이 웹 서비스 (IIS에서 호스팅 됨)를 호출하고 싶습니다.CustomBinding 끝점이있는 클라이언트에서 웹 서비스를 호출하는 방법은 무엇입니까?

는 서비스 계약은 다음과 같습니다

:

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="NewBinding0"> 
      <textMessageEncoding /> 
      <httpTransport /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <services> 
     <service name="DiscoveryWebService.DiscoveryService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="NewBinding0" 
      contract="DiscoveryWebService.IDiscoveryService" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

클라이언트 응용 프로그램 코드는 다음과 같습니다처럼

[ServiceContract(Namespace = "http://schemas.microsoft.com/windows/management/2012/01/enrollment")] 
    [XmlSerializerFormat] 
    public interface IDiscoveryService 
    {  
     [OperationContract(Name = "Get")] 
     [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat=WebMessageFormat.Xml, ResponseFormat=WebMessageFormat.Xml)] 
     string DiscoveryGet(); 
    } 

web.config 파일의 내용이 보인다

string uri = " http://localhost/EnrollmentServer/Discovery.svc"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); req.ContentType = "unknown"; req.Method = "GET"; WebResponse response = req.GetResponse(); StreamReader loResponseStream = new StreamReader(response.GetResponseStream(), false); string responseString = loResponseStream.ReadToEnd(); 

Get 메소드가 반환 한 문자열 대신 WSDL 파일의 HTML 내용을 가져오고 있습니다. 내가 올바른 방향으로하고 있는지 여부를 알 수는 없습니까?

이 점에 대해 도움을 주시면 감사하겠습니다.

+0

"carlosfigueira"가 제공 한 아래 답변을 시도했습니다. 웹 서비스가 WCF 테스트 클라이언트와도 작동하지 않는 경우에도 이러한 변경 사항이있는 것으로 보입니다. –

답변

1

webMessageEncoding 바인딩 요소를 사용하는 끝점에 대해서만 [WebGet] (및 [WebInvoke]) 특성이 적용됩니다. manualAddressing 속성이 true으로 설정된 HTTP 전송 및 서비스에없는 <webHttp/> 끝점 동작을 사용합니다. 아래 나열된 변경하는 경우, 그것을 작동합니다 :

서비스 계약 :

[ServiceContract(Namespace = "http://schemas.microsoft.com/windows/management/2012/01/enrollment")] 
[XmlSerializerFormat] 
public interface IDiscoveryService 
{  
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] 
    string DiscoveryGet(); 
} 

의 Web.config :

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="NewBinding0"> 
      <webMessageEncoding /> 
      <httpTransport manualAddressing="true" /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <services> 
     <service name="DiscoveryWebService.DiscoveryService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="NewBinding0" 
      contract="DiscoveryWebService.IDiscoveryService" behaviorConfiguration="Web" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="Web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

클라이언트 코드 :

string uri = "http://localhost/EnrollmentServer/Discovery.svc/DiscoveryGet"; 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
req.Method = "GET"; 
WebResponse response = req.GetResponse(); 

StreamReader loResponseStream = new StreamReader(response.GetResponseStream(), false); 

string responseString = loResponseStream.ReadToEnd(); 
+0

그런 경우 어떻게 HTTP GET과 POST를 사용하여 SOAP xml을 보내고받을 수 있습니까? 이 쿼리에 응답 할 수 있습니까? http://stackoverflow.com/questions/17303466/wcf-how-to-choose-right-binding-and-service-contract-when-the-request-and-respo –

+0

블로그 중 일부를 읽고 그것이 전달하면 그 비누 1.2는 HTTP GET과 POST를 지원합니다. 웹 HTTP 바인딩 대신 비누 1.2 서비스를 사용하여 이것을 어떻게 달성 할 수 있는지 제안 해 주시겠습니까? –