WCF 오류- 'UserService.UserService'계약을 참조하는 기본 끝점 요소를 찾을 수 없습니다.


98

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

ServiceModel 클라이언트 구성 섹션에서 'UserService.UserService'계약을 참조하는 기본 끝점 요소를 찾을 수 없습니다. 이는 응용 프로그램에 대한 구성 파일이 없거나이 계약과 일치하는 끝점 요소가 클라이언트 요소에서 찾을 수 없기 때문일 수 있습니다.

해결되었습니다!

나는 이것이 Silverlight 응용 프로그램이라고 언급하지 않았습니다. 자체 "ServiceReferences.ClientConfig"파일이있는 DLL에 wcf 참조가 있습니다. DLL의 ServiceReferences.ClientConfig의 내용을 주요 silverlight 프로젝트로 옮겼습니다.


DLL을 실행하는 응용 프로그램이 타사 인 경우 (예 : DLL이 다른 응용 프로그램의 플러그인 인 경우)?
스테파노 Kargas

답변:


186

나는 같은 문제로 뛰어 들었다. 내 응용 프로그램도 Silverlight 응용 프로그램이었고 서비스가 사용중인 사용자 지정 UserControl이있는 클래스 라이브러리에서 호출되었습니다.

해결책은 간단합니다. 클래스 라이브러리의 구성 파일 (예 : ServiceReferences.ClientConfig)에서 엔드 포인트 정의를 silverlight 애플리케이션의 구성 파일로 복사하십시오. 이 작업을 수행하지 않아도 작동 할 것으로 예상 할 수 있지만 레드몬드의 누군가가 그날 휴가를 보냈습니다.


50
이 솔루션은 ASP.NET 및 MVC 프로젝트에도 유효합니다. 클래스 라이브러리에 서비스를 추가하면 기본적으로 작동하지 않습니다. 라이브러리 프로젝트의 app.config에서 system.serviceModel 섹션을 가져 와서 web.config에 넣습니다.
Adam Pope

5
이것은 모든 종류의 프로젝트에 해당하는 것처럼 보입니다. 저는 quartz.net을 Windows 서비스로 사용하고 있었고 웹 서비스를 참조하는 다른 어셈블리에서 작업을했습니다. 그것은 나에게도 효과적이었습니다. 고마워.
thiagoleite

2
안녕하세요, Windows Phone 프로젝트에서도 작동했습니다. @thiagoleite가 말했듯이 대부분의 프로젝트 유형에서 작동하는 것 같습니다.
Thanushka

3
Redmond 휴가 농담에 +1 ... 어쨌든, 대신 외부 파일로 추가하는 방법이 web.config있습니까?
Shimmy Weitzhandler 2015 년

1
@sprite Vishal의 대답 으로 코드에서 필요한 설정을 설정했습니다 (클라이언트 생성자를 재정의했습니다) . 이런 식으로 어셈블리를 통해 배송됩니다. 감사!
Shimmy Weitzhandler

45

이러한 값을 클래스 라이브러리에서 프로그래밍 방식으로 설정할 수도 있습니다. 이렇게하면 라이브러리에서 구성 파일의 불필요한 이동을 방지 할 수 있습니다. 간단한 BasciHttpBinding의 예제 코드는 다음과 같습니다.

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);

@wooncherk, 내 클래스 라이브러리에는 wsdl에 대한 참조가 있습니다. 이 코드를 어디에 넣어야합니까? 나는 그것을 C # dll로 빌드하고 dll을 내 앱 파일에 넣고 IronPython에서 참조합니다. 감사합니다
Срба 2015

12

WPF 또는 Silverlight 대신 WPF를 사용하는 동안 누군가가 동일한 문제를 겪는 경우를 대비하여 :

웹 서비스에 연결할 때이 오류가 발생했습니다. 내 코드가 "기본"WPF 응용 프로그램 솔루션에 있었을 때 문제없이 완벽하게 작동했습니다. 그러나 코드를 더 합리적인 DAL 계층 솔루션으로 옮겼을 때 예외가 발생했습니다.

ServiceModel 클라이언트 구성 섹션에서 'MyWebService.MyServiceSoap'계약을 참조하는 기본 끝점 요소를 찾을 수 없습니다. 이는 응용 프로그램에 대한 구성 파일이 없거나이 계약과 일치하는 끝점 요소가 클라이언트 요소에서 찾을 수 없기 때문일 수 있습니다.

이 스레드의 "Sprite"에서 설명한 것처럼 태그를 수동으로 복사해야합니다.

WPF 앱의 경우 이는 내 DAL 솔루션의 app.config 에서 기본 WPF 애플리케이션 솔루션 의 app.config 로 태그를 복사하는 것을 의미 합니다.


이것은 훌륭하지만 "Adam Pope"가 그랬던 것처럼 내 자신의 대답 아래에 짧은 코멘트로 더 좋을 것입니다. 더 많은 사람들이 읽을 것입니다.
sprite

2
@sprite : 주석을 추가했지만 StackOverflow 주석은 항상 하나의 긴 단락으로 표시됩니다. 저와 같은 5 개 문단 답장의 경우 길고 읽을 수없는 비 친화적 인 문단이 생겼을 것입니다. 나에게 도움을 다른 사용자에게 더 많은 가능성이 명확한 답을 제공하기 위해 별도의 응답 허용 쓰기 (어떤하자가, 현실을 직시이 같은 웹 사이트의 포인트입니다)
마이크 Gledhill

6

서비스를 처음 추가했을 때 Visual Studio가 웹 구성을 업데이트하지 않은 이유가 무엇이든 동일한 문제가 발생했습니다. 서비스 참조를 업데이트해도이 문제가 해결된다는 것을 알았습니다.

단계 :

  1. 서비스 참조 폴더로 이동
  2. 확장
  3. 마우스 오른쪽 버튼을 클릭하고 업데이트 서비스 참조를 선택합니다.
  4. 웹 구성 업데이트 관찰

예, 이것은 나를 위해 트릭을했습니다. 타사 wsdl 서비스 참조를 사용하고 있으며 서비스 참조를 업데이트 할 때까지이 오류가 발생했습니다
ejhost

나도. 제대로 작동하고 갑자기 작동하지 않기 때문에 분명했습니다. 변경했을 수 있으며 서비스 참조를 업데이트하지 않았습니다.
무슨 소리

4

WCF 서비스의 web.config를 "endpoint address =" "binding ="basicHttpBinding "..."(이전의 binding = "wsHttpBinding")으로 변경합니다. 앱을 빌드 한 후 "ServiceReferences.ClientConfig" ""configuration>에 값이 있습니다. . 그러면 잘 작동합니다.


3

svcutil.exe에서 생성 한 output.config의 이름을 app.config로 바꿉니다. 그것은 나를 위해 일했습니다.


2

"UserService"클래스가 구현하는 인터페이스가 있습니까?

엔드 포인트는 계약 속성에 대한 인터페이스를 지정해야합니다.

contract="UserService.IUserService"


1

이것이 정말로 문제인지 확실하지 않지만 바인딩 구성 ()에 대해 동일한 이름을 가지고있는 것으로 보입니다.

나는 일반적으로 "UserServiceBasicHttp"또는 이와 유사한 것으로 엔드 포인트를 호출하려고 시도하고 ( "Binding"은 여기에서 할 일이 없습니다) ".... Configuration"으로 바인딩 구성을 호출하려고합니다. 잠재적 인 이름 충돌을 방지하기위한 "UserServiceDefaultBinding".

마크


0

작동하도록 호출 App.config 파일에 서비스를 추가해야했습니다. 결국 당신은 그것을 확인하십시오. 이것은 나를 위해 일하는 것 같았습니다.


0

이 문제는 다른 응용 프로그램을 통해 서비스를 사용할 때 발생하며 응용 프로그램에 구성 파일이있는 경우이 파일에 서비스 구성 정보를 추가하기 만하면됩니다. 내 상황에는 구성 파일이 없으므로이 기술을 사용하고 잘 작동했습니다. 애플리케이션에 URL 주소를 저장하고 읽고 BasicHttpBinding () 메서드를 사용하여 매개 변수로 서비스 응용 프로그램에 보냅니다. 이것은 내가 한 간단한 데모입니다. 그것:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);

0

AX 2012 AIF 서비스 로 작업하고 AX (x ++) 내에서 C # 또는 VB 프로젝트 를 호출하려고 시도하고 "기본 엔드 포인트를 찾을 수 없음" ... 또는 "계약을 찾을 수 없음" 과 같은 오류를 겪는 사람들을 위해 ... 돌아 가기 Visual Studio (c #) 프로젝트에 추가하고 서비스 클라이언트를 정의하기 전에 다음 줄을 추가 한 다음 프로젝트를 배포하고 AX 클라이언트를 다시 시작하고 다시 시도하십시오. 참고, 예는 NetTcp 어댑터에 대한 것이므로 필요에 따라 다른 어댑터를 쉽게 사용할 수 있습니다. .

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);

-2

PRISM 프레임 워크를 사용하는 WPF 애플리케이션을 사용하는 경우 구성이 시작 프로젝트 (즉, 부트 스트 래퍼가있는 프로젝트)에 있어야합니다.

간단히 말해 클래스 라이브러리에서 제거하고 시작 프로젝트에 넣으십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.