문제

가 프록시하는 웹 서비스를 VS2008/.NET3.5 솔루션입니다.을 생성할 때 클라이언트입니다.그물을 던졌 이 오류가 발생할 수 있습니다.

을 찾을 수 없습는 기본 엔드포인트를 참조하는 요소 계약'IMySOAPWebService'에서의 논 클라이언트 구성 섹션이 있습니다.이 될 수 있지 않기 때문에 configuaration 파일을 발견을 위한 당신의 응용 프로그램나지 않기 때문에 끝점이 일치하는 요소를 이 계약에서 찾을 수있는 클라이언트 요소입니다.

검색에 대한 이 오류가 나에게 말을 사용하는 네임스페이스 풀에서는 계약서입니다.여기에서의 내용.config 전체 네임스페이스:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
            contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>

나 XP 를 실행하는 지역(기 때문에 나는 이것을 언급의 숫자는 구글타 언급 win2k3) 니다.config 복사하는 앱입니다.exe.config,그래도 문제가되지 않습니다.

어떤 clues?

도움이 되었습니까?

해결책 3

몇 가지 옵션을 테스트 한 후 마침내 사용 하여이 문제를 해결했습니다.

계약 = "imysoapwebservice"

즉, 구성에 풀 네임 스페이스없이. 어떤 이유로 든 전체 이름이 제대로 해결되지 않았습니다

다른 팁

"클래스 라이브러리에서 서비스를 호출하고 다른 프로젝트에서 클래스 라이브러리를 호출하는 경우이 오류가 발생할 수 있습니다."

이 경우 WSS 구성 설정을 WinApp 또는 Web.Config 인 경우 WS 구성 설정을 기본 프로젝트 앱에 포함시켜야합니다. 이것은 프리즘과 WPF/실버 라이트와 함께 갈 수있는 방법입니다.

나는 결합 파일에 새 설정을 추가하고 싶지 않았기 때문에 바인딩 및 엔드 포인트 주소 인스턴스를 직접 만들어서 이것 (다른 사람들이 제안한 것처럼 생각합니다)을 해결했습니다 (이것은 광범위하게 사용되는 일부 기존 라이브러리 코드를 대체하는 것입니다. 이전에 이전 웹 서비스 참조 등을 사용 했으므로 모든 곳에서 새로운 구성 설정을 추가하지 않고도 삭제할 수 있기를 원했습니다.

var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);

using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
    //set timeout
    productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);

    //call web service method
    productResponse = productService.GetProducts();
} 

편집하다

HTTPS를 사용하는 경우 사용해야합니다. BasicHttpsBinding 보다는 BasicHttpBinding.

나는이 같은 문제를 가졌다. 웹 참조의 경우 첫 번째 매개 변수로 URL을 생성자에게 제공해야합니다.

new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx");

새로운 스타일 웹 서비스 참조의 경우 구성의 엔드 포인트 항목을 나타내는 이름을 제공해야합니다.

new WebService.WebServiceSoapClient("WebServiceEndpoint");

해당 항목이 있습니다 Web.config 또는 App.config:

<client>
      <endpoint address="http://myservice.com/moo.aspx"
        binding="basicHttpBinding" 
        bindingConfiguration="WebService"
        contract="WebService.WebServiceSoap"
        name="WebServiceEndpoint" />
    </client>
  </system.serviceModel>

"오래된 프로그램에서 일했다"에서 터널 비전을 제거하기가 매우 어렵다.

나는 이 같은 상황이

  • WCF 어딘가에 호스팅 서비스
  • 주요 프로젝트
  • 소비자 형식의 프로젝트'클래스 라이브러리'는 서비스에 대한 참조 WCF 서비스
  • 주요 프로젝트 통화 방법을 소비자에서 프로젝트

이제 소비자 프로젝트가 관련된 모든 구성 설정 <system.serviceModel> 태그의 내용.config,그 여전히 던지는 같은 오류로습니다.

모든 나가 추가되는 동일한 태그 <system.serviceModel> 나의 주요 프로젝트의 응용 프로그램입니다.config 파일에 마지막으로 우리가 갈 수 있습니다.

실제 문제로까지 나의 케이스에서,그것을 읽고 잘못 구성 파일입니다.대신 소비자의 응용 프로그램입니다.config,그것을 언급했다는 주 proj 의 구성.그것은 내게 두 시간 그는다.

"클래스 라이브러리에서 서비스를 호출하고 다른 프로젝트에서 클래스 라이브러리를 호출하는 경우이 오류가 발생할 수 있습니다."

"이 경우 웹 앱인 WinApp 또는 Web.Config 인 경우 WS 구성 설정을 기본 프로젝트 앱에 포함시켜야합니다. PRISM 및 WPF/SILLLIGHT를 사용하는 방법입니다."

예, 그러나 메인 프로젝트 (예 : Orchard CMS)를 변경할 수 없다면 프로젝트에서 WCF 서비스 구성을 유지할 수 있습니다.

클라이언트 생성 방법으로 서비스 도우미를 만들어야합니다.

public static class ServiceClientHelper
{
    public static T GetClient<T>(string moduleName) where T : IClientChannel
    {
        var channelType = typeof(T);
        var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
        var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;

        if (contractAttribute == null)
            throw new Exception("contractAttribute not configured");

        //path to your lib app.config (mark as "Copy Always" in properties)
        var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); 

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
        var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        if (serviceModelSectionGroup == null)
            throw new Exception("serviceModelSectionGroup not configured");

        var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
        var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }
}

그리고 그것을 사용하십시오 :

using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
                ... get data from service ...
            }

세부 사항을 참조하십시오 이 기사.

이것은 나를 미치게했다.

WCF와 함께 Silverlight 3 Prism (CAB)을 사용하고 있습니다.

프리즘 모듈에서 WCF 서비스를 호출하면 동일한 오류가 발생합니다.

서비스 모델 클라이언트 구성 섹션에서 'ImyService'계약을 참조하는 기본 엔드 포인트 요소를 찾을 수 없습니다. 응용 프로그램에 대해 구성 파일이 발견되지 않았 거나이 계약과 일치하는 엔드 포인트 요소가 클라이언트 요소에서 찾을 수 없기 때문일 수 있습니다.

모듈의 serviceReferences.clientConfig 파일이 아닌 serviceReferences.clientConfig 파일을 위해 쉘의 .xap 파일을보고있는 것으로 나타났습니다. 내 실버 라이트 쉘 애플리케이션의 기존 ServiceReferences.clientConfig 파일에 바인딩을 추가했습니다 (자체 WCF 서비스라고 함).

그런 다음 웹 프로젝트의 ClientBin 폴더에 대한 새 .XAP 파일을 생성하려면 Shell 앱을 재구성해야했습니다.

이제이 코드 라인은 마침내 작동합니다.

MyServiceClient myService = new MyServiceClient();

여기서 몇 가지 응답이 클래스 파일에서 서비스를 참조하는 마음이 모호한 모호한 오류에 직면 할 때 올바른 솔루션에 부딪칩니다. 서비스 구성 정보를 app.config web.config의 콘솔 또는 Windows 앱으로 복사하십시오. 그 대답 중 어느 것도 당신에게 무엇을 복사 해야하는지 보여주지 않는 것 같습니다. 그것을 시도하고 수정합시다.

다음은 클래스 라이브러리의 구성 파일에서 콘솔 앱의 구성 파일에 복사 한 내용입니다.

당신은 기본적으로 내부의 모든 것을 원합니다 System.ServiceModel 부분:

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ITranslationServiceOutbound" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://MyHostName/TranslationServiceOutbound/TranslationServiceOutbound.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITranslationServiceOutbound"
    contract="TranslationService.ITranslationServiceOutbound" name="BasicHttpBinding_ITranslationServiceOutbound" />
</client>

WCF 서비스가 BIN 폴더의 참조 .dll 파일로 ASP.NET 응용 프로그램에 추가되는 클래스 라이브러리에 추가 된 ASP.NET 응용 프로그램 내 에서이 오류가 발생했습니다. 오류를 해결하기 위해 APP.NET 사이트/앱의 WCF 서비스를 참조하는 클래스 라이브러리 내의 app.config 파일의 구성 설정이 ASP.NET 사이트/앱에 대한 WEB.Config 설정에 복사해야합니다.

클래스 라이브러리 인터페이스를 사용할 때 클라이언트 UI의 app.config에 복사 할뿐만 아니라 서비스 참조 이름으로 바인딩 이름을 접두사해야했습니다 (Mine IS ServiceReference 아래에서).

예 :

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ServiceReference.ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

생성 된 기본 대신 :

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

나는 같은 문제가 있었지만 계약 네임 스페이스를 변경하는 것은 나에게 효과가 없었습니다. 그래서 .NET 3.5 서비스 참조 대신 .NET 2 스타일 웹 참조를 시도했습니다. 그것은 효과가있었습니다.

Visual Studio 2008에서 웹 참조를 사용하려면 '서비스 참조 추가'를 클릭 한 다음 대화 상자에 나타날 때 '고급'을 클릭하십시오. 이 점에서 서비스 참조 대신 웹 참조를 사용할 수있는 옵션을 찾을 수 있습니다.

서비스를 소비하는 비축 애플리케이션을 테스트하면이 문제가 발생할 수 있습니다.

다른 사람들이 입력 한 정보는 이것의 근본 원인을 다룹니다. 자동 테스트 케이스를 작성하려고하는 경우 테스트중인 장치가 실제로 서비스 인터페이스를 호출하는 경우 테스트 프로젝트에 서비스 참조를 추가해야합니다. 이것은 라이브러리 유형의 오류를 사용하여 응용 프로그램의 맛입니다. 인터페이스를 소비하는 내 코드가 있기 때문에 즉시 이것을 깨닫지 못했습니다. 도서관에 없습니다. 그러나 테스트가 실제로 실행되면 테스트중인 어셈블리가 아닌 테스트 어셈블리에서 실행됩니다.

단위 테스트 프로젝트에 서비스 참조를 추가하면 내 문제가 해결되었습니다.

단위 테스트에서 상황이 있습니다. app.config 파일을 단위 테스트 프로젝트에 복사했습니다. 따라서 단위 테스트 프로젝트에는 엔드 포인트 정보도 포함되어 있습니다.

나는이 문제에 한 번 직면했다. WCF 서비스를 사용하는 인터페이스를 여전히 개발하고 있었기 때문입니다. 테스트 응용 프로그램과 지속적인 개발을 구성했습니다. 그런 다음 개발 중에 서비스의 네임 스페이스를 변경했습니다. 따라서 WCF 클래스와 일치하기 위해 Web.config에서 "System.ServiceModel-> client-> endpoint-> contract"를 두 번 확인했습니다. 그런 다음 문제가 해결됩니다.

구성의 네임 스페이스는 클라이언트의 기본 네임 스페이스 다음에 나머지 네임 스페이스 경로를 반영해야합니다 (프로젝트 속성에 구성된대로). 귀하의 게시 된 답변을 기반으로, 내 추측은 고객이 "Fusion.dataexchange.workflows"네임 스페이스에 있도록 구성되어 있다고 생각합니다. 클라이언트 코드를 다른 네임 스페이스로 이동 한 경우 나머지 네임 스페이스 경로와 일치하도록 구성을 업데이트해야합니다.

같은 문제가있는 다른 사람에게만; 서비스에 연결하려는 내 방법에 대한 단위 테스트를 작성했습니다. 매번 동일한 예외로 실패했습니다. 왜 그런지 모르겠습니다. 내가 winform에서 그것을 달렸을 때 그것은 잘 작동합니다.

같은 문제가 있습니다. 클래스 라이브러리에서 WCF 서비스를 사용하고 Windows 응용 프로그램 프로젝트에서 클래스 라이브러리를 호출했지만 변경 사항을 잊어 버립니다. <system.serviceModel> Windows 응용 프로그램 프로젝트의 구성 파일에서 동일합니다 <system.serviceModel> 클래스 라이브러리의 app.config 파일
솔루션 : 외부 프로젝트 구성 변경 클래스 라이브러리의 WCF 구성과 동일합니다.

클래스 라이브러리에서 웹 서비스를 참조하면 app.config를 Windows 응용 프로그램 또는 콘솔 응용 프로그램에 복사해야합니다.

솔루션 : 외부 프로젝트 구성 변경 클래스 라이브러리의 WCF 구성과 동일합니다.

나를 위해 일했습니다

안녕하세요 저는 동일한 문제를 겪었지만 최상의 솔루션은 .NET이 클라이언트 측 구성을 구성하도록하는 것입니다. 내가 발견 한 것은 http : /namespace/service.svc? wsdl = wsdl0의 쿼리 문자열로 서비스 참조를 추가 할 때 클라이언트쪽에 구성 엔드 포인트를 생성하지 않습니다. 그러나? WSDL-WSDL0을 제거하고 URL http : /namespace/service.svc 만 사용하면 클라이언트 구성 파일에서 엔드 포인트 구성을 만듭니다. 짧은 리메의 경우 "? wsdl = wsdl0".

서비스 클라이언트 선언 라인을 클래스 필드로 넣지 말고 사용한 각 방법에서 인스턴스를 작성하십시오. 따라서 문제가 해결됩니다. 서비스 클라이언트 인스턴스를 클래스 필드로 작성하면 설계 시간 오류가 발생합니다!

Prism Framework를 사용하여 WPF 응용 프로그램을 사용하는 경우 시작 프로젝트에 구성이 있어야합니다 (즉, 부트 스트랩이있는 프로젝트에서).

클래스 라이브러리에서 서비스를 호출하고 다른 프로젝트에서 클래스 라이브러리를 호출하는 경우이 오류가 발생할 수 있습니다.

이 문제를 만들거나 수정하는 방법에는 여러 가지가있는 것 같습니다. 저에게 사용중인 CRM 제품은 기본 코드로 작성되었으며 .NET DLL을 호출 할 수 있지만 기본 응용 프로그램에 필요한 구성 정보를 사용합니다. 나를 위해 CRM 응용 프로그램은 .NET가 아니므로 Machine.config 파일에 넣어야했습니다 (원하는 위치가 아님). 또한 회사는 웹 센스를 사용하기 때문에 407 프록시 인증 필요한 문제로 인해 서비스 참조를 추가하는 데 어려움을 겪었습니다.

프록시 솔루션 :

작업에 대한 WCF 서비스 참조를 얻으려면 DLL의 app.config에서 정보를 기본 응용 프로그램 구성에 복사해야했습니다 (그러나 Machine.config 인 경우). 또한 엔드 포인트 정보를 동일한 파일에 복사해야했습니다. 일단 내가 그렇게 일하면 그것은 나를 위해 일하기 시작했습니다.

확인. 내 사례는 약간 다른 것이지만 마침내 고정을 찾았습니다. console.exe-> dll-> ws1-> dll-> ws2 호출

권장대로 Console.exe.config에 WS1의 서비스 모델과 WS2의 구성을 모두 가지고 있습니다. - 문제를 해결하지 못했습니다.

그러나 내가 추가 할 때까지 여전히 작동하지 않았습니다. WS2에서 WS1의 WebReference 실제로 WS2의 프록시를 생성하고 호출하는 DLL에만 해당됩니다.

나는 같은 문제가 있었다
데스크탑 앱을 사용하고 글로벌 날씨 웹 서비스를 사용하고있었습니다.

서비스 참조를 삭제하고 웹 참조 및 문제 해결 감사를 추가했습니다.

솔루션은 클라이언트 web.config의 엔드 포인트 이름 속성에서 엔드 포인트 이름을 제거하는 것이 었습니다.

ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");

운동하는 데 하루 종일 걸렸습니다. 또한 초기 오류가 나타날 때 잘못되었지만이 수정이 제자리에 있으면 계약 이름이 잘못되었습니다. 계약 이름 문자열에 대한 두 배의 트리플 점검 사람들 !! Attrib : Ian

찾아야 할 것을 추가 할 수 있습니다. (Tom Haigh 's 대답은 이미 그것에 대해 암시하지만, 나는 명백하고 싶다)

나의 web.config 파일은 다음과 같은 정의되었습니다.

<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

나는 이미 하나의 참조에 BasichttpsBinding을 사용하고 있었지만 Basichttpbinding이 필요한 새로운 참조를 추가했습니다. 내가해야 할 일은 protocolMapping 다음과 같이 :

<protocolMapping>
    <add binding="basicHttpBinding" scheme="http" />
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

처럼 LR 올바르게 지적하면, 이것은 올바른 장소에서 정의해야합니다. 저에게는 단위 테스트 프로젝트의 app.config와 메인 서비스 프로젝트의 web.config에서 하나를 의미했습니다.

Global Scope 운영자가없는 구성 파일 요소에서 계약을 참조 할 때이 오류가 발생했습니다.

<endpoint contract="global::MyNamepsace.IMyContract" .../>

작동하지만

<endpoint contract="MyNamepsace.IMyContract" .../>

"계약을 참조하는 기본 엔드 포인트 요소를 찾을 수 없음"오류를 제공합니다.

mynamepsace.imycontract를 포함하는 어셈블리는 기본 응용 프로그램과 다른 어셈블리에 있으므로 글로벌 범위 해상도를 사용해야 할 필요성을 설명 할 수 있습니다.

나는 같은 오류를 얻었고 많은 것을 시도했지만 작동하지 않았습니다. 내 "계약"이 전체 프로젝트에 대해 동일하지 않다는 것을 알았을 때보 다 작동하지 않았습니다. 나는 솔루션 내부의 모든 프로젝트에 대해 동일하게 계약을 변경했습니다. 이것은 프로젝트 a입니다

<client>
    <endpoint address="https://xxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference.IIntegrationService" name="basic" />
</client>

프로젝트 B :

<client>
    <endpoint address="xxxxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference1.IIntegrationService" name="basic" />
</client>

마침내 나는 둘 다로 바뀌었다 :

<client>
    <endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>

서비스 참조를 추가 할 때

enter image description here

입력하는 네임 스페이스를 조심하십시오.

enter image description here

인터페이스의 이름으로 추가해야합니다.

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" 
            contract="MyNamespace.IMySOAPWebService" />
</client>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top