2014-02-18 4 views
2

생성 된 app.config 파일을 사용하지 않고도 C# 응용 프로그램에서 Microsoft Translator SOAP Service을 설정하는 데 문제가 있습니다.구성 파일이없는 WCF/Service Reference

Stack answer을 참조
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <startup> 

    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_LanguageService" /> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://api.microsofttranslator.com/V2/soap.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService" 
       contract="Soap.LanguageService" name="BasicHttpBinding_LanguageService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

는, I는 이하의 방법에 사용 :

app.config 파일에는 다음이 포함하지만

internal static Soap.LanguageServiceClient CreateWebServiceInstance() 
{ 
    BasicHttpBinding binding = new BasicHttpBinding(); 
    binding.Name = "BasicHttpBinding_LanguageService"; 
    binding.TextEncoding = System.Text.Encoding.UTF8; 
    return new Soap.LanguageServiceClient(binding, new EndpointAddress("http://api.microsofttranslator.com/V2/soap.svc")); 
} 

를, I는 CreateWebServiceInstance() 전화에도 I 실행 전에 번역자 서비스에서이 처리되지 않은 예외가 발생합니다.

Could not find default endpoint element that references contract 'Soap.LanguageService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element. 

나는 BasicHttpBinding에 익숙하지 않아 어디서부터 시작해야할지 모르겠다.

답변

8

몇 가지 질문이 먼저 나온다. 내가 읽었을 때 당신은 서비스를 이용하려고합니다. 이 서비스는 WDSL을 노출했습니다. SVCUtil (예를 들어)/VisualStudioAddServiceReference에 의해 생성 된 프록시 클래스를 사용하지 않고이를 소비하려고합니까? 아니면 app.config가 아닌 코드로 바인딩을 구성하려고합니까?

위에서 지정한대로 프록시 클래스를 생성하지 않고 서비스를 사용하려는 경우 동적 프록시 생성과 함께 작업해야합니다.().

그렇지 않으면 생성 된 프록시 클래스가있는 경우 바인딩을 구성하기 위해 실제로는 app.config를 사용해야합니다. 이는 훨씬 더 편리하기 때문입니다. 예를 들어 프로덕션을 시작할 때 엔드 포인트 주소가 변경되는 것을 생각하십시오. app.config 바인딩을 사용하지 않으려는 경우에는. 그렇다면 지금하고있는 방식대로 바인딩에 사용할 계약을 추가하는 것을 잊어 버린 것 같습니다. 내가 마지막이 표시되지 않습니다, 당신은 이미 처음 두가

Address 
Binding 
Contract 

) (:

서비스의 ABC를 참조하십시오.

깊이에서 더 많은 문제를 조사 후 편집

. 또한이 서버가 공용 서버라는 사실을 알았습니다. 서비스와 통신 할 수있을뿐만 아니라 바인딩을 만들 수있었습니다. . 내가 토큰을 가지고 있지 않기 때문에 정상입니다 비 승인 된 예외를 얻을 제외 (

서비스에 연결하려면 : Visual Studio에서 이 서비스에 서비스 참조를 추가 Adding the reference

. .. 제 4 단계

 var binding = new BasicHttpBinding(); 
     var client = new LanguageServiceClient(binding, new EndpointAddress("http://api.microsofttranslator.com/V2/soap.svc")); 

단계 세 어딘가에 다음 코드를 추가하여 위의에 의해 발생 될 app.config 파일을 제거 : 메소드를 호출하는 클라이언트를 사용하여 을 당신이해야 할 방법. 다시 AppId를 추가하십시오. 귀하가 서비스에 등록 할 때 유효합니다. 일반적으로이 시점부터 더 이상 문제가 발생하지 않아야합니다.

어쨌든 만나면 알려주세요.

+0

답장을 보내 주셔서 감사합니다. 그 이유는이 별도의 구성 파일로 응용 프로그램을 제공하고 싶지 않기 때문입니다. 공개 된 후에는 엔드 포인트 주소가 변경 될 것으로 예상하지 않습니다. 정확히 계약을 어떻게 정의합니까? 'binding.Contract = ...'를 추가하려했지만'Contract '에 대한 정의''Contract ''에 대한 오류가 발생했습니다 – Spencer

1

나는 그것을 작동시킬 수있었습니다 ... SOAP 인스턴스를 두 번 호출하여 객체를 재정의했습니다.

+1

지금 당장 답을 보았습니다. 일하게되어 기쁩니다. – woutervs