2010-03-23 5 views
2

vs2008의 add servece reference 대화 상자를 사용하여 wsdl 파일로 추가했습니다.비누 클라이언트를 사용할 때 InvalidOperationException이 발생했습니다.

기본 엔드 포인트를 찾을 수 없습니다 요소 계약 "ServiceName.ServiceInterface"에 : 나는 서비스 프록시를 인스턴스화 할 때

MyService serviceproxy = new MyService(); 

, 나는 (독일어 번역) 다음 텍스트로 InvalidOperationException이를 얻을 수 서비스 모델에서 클라이언트 구성 섹션을 참조하십시오. 일 수 있습니다. 응용 프로그램 구성 파일을 찾지 못했거나 클라이언트 구성 요소 항목의 끝 점이 없으면이 계약서에 해당하는 입니다.

여기서 servicename은 vs2008 및 ServiceInterface에 서비스를 추가 할 때 서비스 이름을 자동으로 생성하는 인터페이스입니다. 가 있다면, 당신은 ASP.NET 웹 응용 프로그램 또는 웹 사이트에 있다면의 Web.config의 app.config -

<system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="MyServiceBinding" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
    </system.serviceModel> 
+0

여기에 구성 파일을 게시하고 ServiceContract 인터페이스의 이름을 – albertjan

+0

내 app.config의 내용으로 내 질문을 업데이트했습니다. 그러나 URL은 사용자 입력이므로 코드에서 서비스 url을 지정하고 config에서는 지정하지 않을 것입니다. – codymanix

답변

2

당신은 당신의 설정에서이 같은 필요합니다.

이렇게 엔드 포인트 구성에서 주소를 제거했습니다.

당신은 다음과 같은 코드를하거나 주소에 완전히 엔드 포인트를 지정하도록 선택할 수 있습니다

MyServiceClient proxy = new MyServiceClient(); 
proxy.Endpoint.Address = new EndpointAddress ("http://addressto your service"); //<-- address 
+0

@marc_s : 여기서 말하는 : contract = "ServiceName.ServiceInterface" – albertjan

1

이 설정 파일을 확인하십시오

편집 여기 내의 app.config에 무엇이있다 Winforms 또는 콘솔 응용 프로그램.

여기에 WCF 서비스에 대한 일부 구성이 있어야합니다. <system.serviceModel> 아래의 항목은 문제가되지 않습니다. 그렇지 않은 경우 - 구성에 필요한 정보를 추가하십시오!

코드에서 끝점 URL을 지정하려면 클라이언트 프록시 클래스를 인스턴스화 할 때이 작업을 수행해야합니다. 그렇지 않으면 config로 보입니다. 이 코드를 사용하여, 당신의 app.config에서 구성 설정을 HTTP 바인딩을 사용하고있을 것이고, 코드에서 별도로 URL을 지정

BasicHttpBinding binding = new BasicHttpBinding("MyServiceBinding"); 
EndpointAddress address = new EndpointAddress(new Uri("http://localhost:8888/YourService")); 

MyService serviceproxy = new MyService(binding, address); 

그 방법은은 BasicHttpBinding 개체가 설정 아래에서 설정을 읽 바인딩은 name=MyServiceBinding입니다. 태그

난 그냥 당신의 코멘트를 읽어 내부

<client> 
    <endpoint binding="basicHttpBinding" 
    bindingConfiguration="MyServiceBinding" contract="ServiceName.ServiceInterface" 
    name="MyServiceEndpoint"> 
    </endpoint> 
</client> 

:

+0

내 app.config의 내용으로 내 질문을 업데이트했습니다.그러나 URL은 사용자 입력이므로 코드에서 서비스 url을 지정하고 config에서는 지정하지 않을 것입니다. – codymanix

+0

이렇게하면 설정 파일의 내용을 완전히 무시합니다. 그리고 그것은 여전히 ​​계약에 대해 모른다. – albertjan

+0

계약서를 지정해야합니다. 원하는 경우에도 코드에서. 그는 단지 코드에서 uri를 지정하기를 원한다고 말합니다. – albertjan

1

편집 : 죄송합니다, 내 첫 번째 대답은 틀렸다. 클라이언트의 경우 :

ChannelFactory<Interface> factory = new ChannelFactory<YourServiceInterface>(new basicHttpBinding(), new EndpointAddress(new Uri("http://localhost:8888/YourService"))); 
YourServiceInterface proxy = factory.CreateChannel(); 
관련 문제