No se puede encontrar el punto final en Azure Hosted WCF

He buscado por todas partes una respuesta a un problema que tengo al alojar mi WCF en Azure y me he rendido. Ahora estoy haciendo esta pregunta, espero que alguien pueda responderla.

Tengo mi WCF en IIS7 funcionando perfectamente y ya tengo mi aplicación cliente conectándose sin problemas. Todo funciona localmente. Tengo esta configuración vinculante en mi archivo de configuración de WCF:

<system.serviceModel>
<standardEndpoints />
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" allowCookies="true" maxBufferSize="2147483647"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="webHttp" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service name="SurveyWCFService.SurveyService">
    <clear />
    <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="basicHttp"
      bindingName="basicHttp" contract="SurveyWCFService.SurveyService" />
    <endpoint address="json" behaviorConfiguration="jsonBehavior"
      binding="webHttpBinding" bindingConfiguration="webHttp" contract="SurveyWCFService.SurveyService" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="jsonBehavior">
      <webHttp />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <!-- 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>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Como puede ver, tengo 2 puntos finales, un punto final SOAP para aplicaciones C# que se conectan a mi servicio y un punto final con nombre JSON para clientes que usan REST para acceder a él. Implementé esto en Azure con las configuraciones predeterminadas en la plantilla "Rol web de Azure" y mi cliente ya puede acceder a la URL dada que generó Azure. Pero aquí están las cosas raras:

1) Cada vez que mi cliente consume algún método de servicio dado, trae esta excepción:

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at
http://<hostedservicename>/SurveyService.svc that could accept the message. 
This is often caused by an incorrect address or SOAP action. 
See InnerException, if present, for more details. ---> 
System.Net.WebException: The remote name could not be resolved: '<hostedservicename>'

It's weird because it means my app is not connecting to .cloudapp.net. So I tried using my browser to call on some service methods. Fiddler tells me the response is "HTTP 400". I've also double-checked on the generated client-config files after referencing the URL for the endpoint address, and the address is correct.

2) Azure has decided to replace my endpoints and bindings with its own. I came to that conclusion when I checked using Fiddler and checked out the wsdl files as well, here are the bottom part of the wsdl files:

WSDL locales

<wsdl:service name="SurveyService"><wsdl:port name="basicHttp_SurveyService" 
binding="tns:basicHttp_SurveyService"><soap:address location="http://localhost
/SurveyServiceLibrary/SurveyService.svc/soap"/></wsdl:port></wsdl:service>

Azure WSDL

<wsdl:service name="SurveyService"><wsdl:port name="BasicHttpBinding_SurveyService" 
binding="tns:BasicHttpBinding_SurveyService"><soap:address location=
"http://<hostedservicename>.cloudapp.net/SurveyService.svc"/></wsdl:port>   
</wsdl:service>

How to make my WCF work like it was on my local environment? Is there some configuration do I need to make on my WCF? On Azure?

preguntado el 31 de julio de 12 a las 11:07

2 Respuestas

Te sugiero que eches un vistazo a la aplicación que llamadas your WCF service. I'm under the impression that it's not using the full URL. Look for the cliente/punto final elemento, así:

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
      <system.serviceModel>
          ...
          <client>
              <endpoint address="http://<hostedservicename>.cloudapp.net/SurveyService.svc" ... />
          </client>
      </system.serviceModel>
  </configuration>

Ah, y el El nombre remoto no pudo ser resuelto El error también podría implicar que aún no obtuvo la replicación de DNS. Lo que tiendo a hacer en esos casos es cambiar manualmente mi servidor DNS a 8.8.8.8 (servidor DNS de Google) y la mayoría de las veces esto funciona (puede volver a cambiarlo a automático después de unos minutos).

Respondido 31 Jul 12, 11:07

thanks for the tip, already checked it too, the client calls on the correct endpoint address, but the weird thing is, when I use my local WCF it generates the right endpoints and behaviorConfiguration on the client config (it generates the SOAP one). With the Azure-hosted WCF it generates some sort of default bindingConfiguration. - As Subido

Dejando esto para quien tropiece con el mismo problema:

Revisé el espacio de nombres que proporcioné en mi archivo de configuración de servicio, tenía un escribir mal on the namespace, tonto de mí :)

Respondido 01 ago 12, 14:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.