2009-08-03 6 views
1

Je développe un service WCF hébergé par IIS, en utilisant VSTS2008 + C# + .Net 3.5. Je trouve quand référence le service d'un client en employant l'addition de référence de service ..., le client doit être capable de résoudre le nom de machine en adresse IP, parce que WSDL référence un certain fichier de schéma par le nom de machine. Voici un exemple d'une partie du fichier WSDL, afin d'analyser le fichier WSDL du côté client pour générer proxy, nous devons être en mesure de résoudre le nom de la machine testmachine1 à l'adresse IP associée,comment lier le service WCF à l'adresse IP

<xsd:import schemaLocation="http://testmachine1/service.svc?xsd=xsd1" 
    namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> 

Ma question est, pour une raison quelconque, le nom de la machine ne peut pas être résolu tout le temps (pour des raisons non techniques), donc je veux lier à l'adresse IP du serveur IIS d'hébergement. C'est possible? Si oui, appréciez si quelqu'un pourrait conseiller. Voici mon fichier web.config actuel WCF, je veux savoir comment le modifier pour lui permettre de travailler avec une adresse IP,

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="Foo.WCF.ServiceBehavior" 
     name="Foo.WCF.CustomerManagement"> 
     <endpoint address="" binding="basicHttpBinding" 
        contract="Foo.WCF.ICustomerManagement"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Foo.WCF.ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

merci à l'avance, George

Répondre

2

Si votre service WCF est hébergé dans IIS, vous ne pouvez pas définir une adresse distincte. Vous devez utiliser l'URL du répertoire virtuel où votre fichier SVC vit - soit avec un nom de machine (http://yourserver/virtualdir/myservice.svc) ou une adresse IP (http://123.123.123.123/virtualdir/myservice.svc).

Si vous utilisez l'adresse IP pour ajouter la référence de service, cette adresse IP sera utilisée dans le fichier WSDL généré par l'importation du service.

Si vous hébergez vous-même le service WCF (service Windows, application console), vous pouvez définir l'adresse du service dans config et utiliser le nom de la machine ou l'adresse IP de la machine.

Marc

+0

Salut Marc, désolé je trouve quelque chose de différent. J'ai essayé d'accéder à WSDL à partir d'IE en utilisant l'adresse IP, http://123.123.123.123/service.svc?wsdl, il utilise le nom de la machine pour faire référence à un autre fichier xsd d'importation. Vous pouvez essayer de reproduire mon problème. C'est pourquoi je suis mal à la tête, sans être capable de résoudre le nom de la machine en adresse IP, je ne peux pas importer le fichier xsd. Des commentaires ou des solutions? – George2

+1

OK, intéressant - je n'ai jamais eu à le faire moi-même, mais je suis surpris. Eh bien, une option que vous avez est de télécharger les métadonnées vous-même, l'assembler dans un grand WSDL statique, et ensuite présenter ce WSDL aux consommateurs de votre service Web au lieu de laisser le service créer le WSDL automatiquement. –

+0

Merci Marc, je sais que ça marche. Ma question est de savoir si à partir de web.config, nous avons une option pour lier à l'adresse IP autre que le nom de la machine? Vous pouvez voir dans web.config, je n'ai pas assigné le nom de la machine ou l'adresse IP, donc c'est un comportement par défaut. Je ne suis pas sûr si nous sommes en mesure d'écraser ce comportement. Des commentaires? – George2

1

J'avais cette même question et vu votre message tout en cherchant des réponses à mon problème.

Je pense que j'ai peut-être trouvé une solution, qui consistait à changer la liaison du site IIS pour être celle de l'ip. Je ne comprends toujours pas pourquoi cela ne peut pas être un paramètre dans le fichier .config.

Voici le lien vers la solution que j'ai trouvée (http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx).

Voici un lien vers mon article sur mon problème (.NET WCF service references use server name rather than IP address causing issues when consuming).

Voici un lien vers mon article sur la recherche de la solution (WCF (hosting service in IIS) - machine name automattically being picked up by WCF rather than IP?).

Questions connexes