2013-03-01 2 views
0

Comme le titre l'indique, j'ai un service WCF hébergé dans un service Windows. Lorsque j'utilise le Visual Studio WCFTestClient, la méthode GetVersion() (qui renvoie juste une chaîne) fonctionne correctement. Lorsque je tente d'appeler la même méthode à partir d'un client Java, j'obtiens une erreur de nom d'hôte non valide.Le service WCF hébergé par Windows renvoie 400 mauvaise demande Nom d'hôte incorrect pour le client JAVA

En utilisant Wireshark je suivis les messages XML et a les éléments suivants:

------- Envoyé ---------

POST /CommunicatorService.svc HTTP/1.1 
Accept: text/xml, multipart/related 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "http://tempuri.org/ICommunicatorService/GetVersion" 

User-Agent: JAX-WS RI 2.2.4-b01 
Host: 192.168.201.210:7770 
Connection: keep-alive 
Content-Length: 373 

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetVersion xmlns="http://tempuri.org/" xmlns:ns2="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns3="http://schemas.datacontract.org/2004/07/DieboldEras.WorkflowContracts" xmlns:ns4="http://schemas.microsoft.com/2003/10/Serialization/"/></S:Body></S:Envelope> 

------ réponse ------------

HTTP/1.1 400 Bad Request 
Content-Type: text/html 
Date: Fri, 01 Mar 2013 20:51:18 GMT 

Connection: close 
Content-Length: 39 

<h1>Bad Request (Invalid Hostname)</h1> 


J'ai joué avec le paramètre hôte, en utilisant le S Nom DNS complet de erver mais le résultat était le même. Ceci est le fichier de configuration:

----- ------ Config

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="DieboldEras.ImagewayCommunicator.Components.CommunicatorService" behaviorConfiguration="DieboldEras.ImagewayCommunicator.Components.CommunicatorServiceBehavior"> 
     <endpoint binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" name="basicHttp" bindingName="basicHttpBinding" 
      contract="DieboldEras.ImagewayCommunicator.Components.ICommunicatorService" > 
     </endpoint> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://192.168.201.210:7770/CommunicatorService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="DieboldEras.ImagewayCommunicator.Components.CommunicatorServiceBehavior"> 
      <!-- To avoid disclosing metadata information, 
       set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True" /> 
      <!-- To receive exception details in faults for debugging purposes, 
       set the value below to true. Set to false before deployment 
       to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="wsHTTPBinding"/> 
     </wsHttpBinding> 
     <mexHttpBinding> 
     <binding name="mexHTTPBinding"/> 
     </mexHttpBinding> 
     <basicHttpBinding> 
    <binding name="basicHttpBinding" /> 
     </basicHttpBinding> 
    </bindings> 
    <client /> 
    </system.serviceModel> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

J'utilise NetBeans pour le client Java et le code est simple:

- ----- Code Java --------

CommunicatorService service = new CommunicatorService(); 
ICommunicatorService port = service.getBasicHttp(); 
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://192.168.201.210:7770/CommunicatorService.svc"); 
String version = port.getVersion(); 

Des pointeurs/astuces de débogage aideraient. Je ne suis pas très familier avec Java, donc je ne sais pas par où commencer, mais il semblerait que quelque chose dans le message envoyé est faux, et soit je peux changer le message ou la config du service pour savoir à quoi m'attendre, Je ne sais pas ce qu'est cette chose.

Merci d'avance!

+0

Semble être un problème de réseau pas WCF. Courez-vous le code de Java de machine différente? Vérifiez les paramètres réseau et IIS. –

Répondre

3

La question était en fait dans le code Java:

CommunicatorService service = new CommunicatorService(); 
ICommunicatorService port = service.getBasicHttp(); 
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://192.168.201.210:7770/CommunicatorService.svc"); 
String version = port.getVersion(); 

devrait effectivement être

CommunicatorService service = new CommunicatorService(); 
ICommunicatorService port = service.getBasicHttp(); 
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://192.168.201.210:7770/CommunicatorService"); 
String version = port.getVersion(); 

Quelle différence 3 lettres font!

Merci pour l'aide NileshKRathod.

0

Essayez ceci pour votre code modèle de service, il peut vous aider ...

<system.serviceModel> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
<services> 
    <service name="VInfotech.Server.Intranet.IntranetService" behaviorConfiguration="IntranetService.Service1Behavior"> 
    <!-- Service Endpoints --> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="VInfotech.Server.Intranet.IIntranet"> 
     <!-- 
      Upon deployment, the following identity element should be removed or replaced to reflect the 
      identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
      automatically. 
     --> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    </service> 
    <service name="VInfotech.Server.Intranet.MobileServicesController" behaviorConfiguration="ServBehave"> 
    <endpoint address="RestService" bindingConfiguration="StreamedRequestWebBinding" binding="webHttpBinding" behaviorConfiguration="restPoxBehavior" contract="VInfotech.Server.Intranet.IMobileServices" /> 
    </service> 
</services> 
<bindings> 
    <webHttpBinding> 
    <binding name="StreamedRequestWebBinding" 
    bypassProxyOnLocal="true" 
      useDefaultWebProxy="false" 
      hostNameComparisonMode="WeakWildcard" 
      sendTimeout="10:15:00" 
      openTimeout="10:15:00" 
      receiveTimeout="10:15:00" 
      maxReceivedMessageSize="9223372036854775807" 
      maxBufferPoolSize="9223372036854775807" 
      maxBufferSize="2147483647" 
      transferMode="StreamedRequest" > 
     <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
    </binding> 
    </webHttpBinding> 
    <basicHttpBinding> 
    <binding name="Binding1" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/> 
    </binding> 
    <!-- For Cyber Source bindings--> 
    <binding name="ITransactionProcessor" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
     <message clientCredentialType="UserName" algorithmSuite="Default"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
    <!--Cyber Source bindings ends here--> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="IntranetService.Service1Behavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    <behavior name="ServBehave"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <!--Behavior for the REST endpoint for Help enability--> 
    <behavior name="restPoxBehavior"> 
     <webHttp helpEnabled="true" /> 
    </behavior> 
    <behavior name="jsonBehavior"> 
     <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
<client> 
    <endpoint address="https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor" binding="basicHttpBinding" bindingConfiguration="ITransactionProcessor" contract="ITransactionProcessor" name="portXML"/> 
</client> 
<diagnostics> 
    <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/> 
</diagnostics> 

J'espère que cela vous aidera. :)

Questions connexes