2009-01-30 20 views
8

Potrzebuję połączyć się z usługą WCF, którą napisałem, bez konieczności instalowania pliku app.config dla aplikacji klienckiej, którą piszę. Jednak mam bardzo trudny czas, próbując dowiedzieć się, jak skonfigurować rzeczy po stronie klienta w kodzie. To tak daleko, jak dostałem ... czy ktoś ma jakieś pomysły, co muszę zrobić, aby to zadziałało? Naprawdę to doceniam.Jak skonfigurować klienta WCF za pomocą wsDualHttpBinding w kodzie?

Jest to kod mam tak daleko:

String baseAddress = "http://localhost/CommService"; 

    WSDualHttpBinding binding = new WSDualHttpBinding(); 
    binding.Name = "WSDualHttpBinding_ICommService"; 
    binding.ClientBaseAddress = new Uri(baseAddress); 
    binding.ReliableSession.Ordered = true; 
    binding.ReliableSession.InactivityTimeout = new TimeSpan(0, 10, 0); 
    binding.ReceiveTimeout = new TimeSpan(0, 10, 0); 
    binding.SendTimeout = new TimeSpan(0, 0, 5); 

    InstanceContext context = new InstanceContext(this); 
    client = new CommServiceClient(context, "WSDualHttpBinding_ICommService"); 
    client.Endpoint.Binding = binding; 

I to jest moja aplikacja klienckiego app.config:

<system.serviceModel> 
    <bindings> 
     <wsDualHttpBinding> 
      <binding name="WSDualHttpBinding_ICommService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:00:05" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" /> 
       <security mode="Message"> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
         algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost/CommService/" 
      binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ICommService" 
      contract="Services.ICommService" name="WSDualHttpBinding_ICommService"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Odpowiedz

9

można łatwo osiągnąć to, co chcesz. Zobacz poniższy kod:

Uri baseAddress = new Uri("http://localhost/CommService"); 
WSDualHttpBinding wsd = new WSDualHttpBinding(); 
EndpointAddress ea = new EndpointAddress(baseAddress, EndpointIdentity.CreateDnsIdentity("localhost")); 
client = new CommServiceClient(new InstanceContext(this), wsd, ea); 

Pozwól mi wyjaśnić co nieco:

  • najpierw tworzymy instancję WSDualHttpBinding z ustawieniami domyślnymi (te są dokładnie te generowane app.config posiada). Jeśli chcesz zmodyfikować dowolne ustawienie, możesz je modyfikować za pomocą odsłoniętych właściwości.
  • następnie tworzymy EndPointAddress z żądanym adresem URL i tożsamością. Nie trzeba łączyć go z powiązaniem, ponieważ połączymy je wszystkie w konstruktorze klienta usług.
  • Na koniec tworzymy klienta usług. Jedno z przeciążeń kontrahenta pozwala nam określić adres powiązania i adres punktu końcowego.
  • ogólnie każdy element dostępny w pliku app.config ma przypisaną klasę w kodzie .NET, a każdy atrybut lub element podrzędny ma powiązaną właściwość w określonej klasie.
+1

To działało idealnie, dziękuję! To doprowadzało mnie do szału, haha. –

Powiązane problemy