2009-08-03 18 views
1

Ich entwickle einen von IIS gehosteten WCF-Dienst mit VSTS2008 + C# + .Net 3.5. Ich finde, wenn Referenz den Dienst von einem Client mithilfe von Add Service Reference ..., muss Client in der Lage sein, den Computername in IP-Adresse aufzulösen, weil WSDL einige Schemadatei nach Computername verweisen. Hier ist ein Beispiel für einen Teil der WSDL-Datei, um WSDL-Datei von der Client-Seite zu analysieren Proxy zu generieren, müssen wir in der Lage Maschinenname testmachine1 an nahe stehende IP-Adresse,So binden Sie den WCF-Dienst an die IP-Adresse

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

Meine Frage ist, zu lösen, Aus irgendeinem Grund kann der Computername nicht immer aufgelöst werden (aus nichttechnischen Gründen), daher möchte ich an die IP-Adresse des IIS-Server-Servers binden. Ist es möglich? Wenn ja, zu schätzen, wenn jemand beraten könnte. Hier ist meine aktuelle WCF web.config Datei, möchte ich wissen, wie es zu ändern, damit es mit der IP-Adresse arbeiten,

<?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> 

Vielen Dank im Voraus, George

Antwort

2

Wenn Ihr WCF-Dienst gehostet wird In IIS können Sie keine separate Adresse festlegen. Sie müssen die URL des virtuellen Verzeichnisses verwenden, in dem Ihre SVC-Datei lebt - entweder mit einem Computernamen (http://yourserver/virtualdir/myservice.svc) oder einer IP (http://123.123.123.123/virtualdir/myservice.svc).

Wenn Sie die IP-Adresse zum Hinzufügen der Service-Referenz verwenden, wird diese IP-Adresse in der vom Service-Import generierten WSDL verwendet.

Wenn Sie den WCF-Dienst selbst hosten (Windows-Dienst, Konsolenanwendung), können Sie die Dienstadresse in der Konfiguration festlegen und entweder den Computernamen oder die IP für den Computer verwenden.

Marc

+0

Hallo Marc, Entschuldigung, ich finde etwas anderes. Ich habe versucht, auf WSDL von IE zuzugreifen, indem ich IP-Adresse, http://123.123.123.123/service.svc?wsdl verwende, es verwendet Maschinenname, um auf andere Import-xsd-Datei zu verweisen. Sie können versuchen, mein Problem zu reproduzieren. Aus diesem Grund habe ich Kopfschmerzen, ohne in der Lage zu sein, den Computernamen in die IP-Adresse aufzulösen. Ich kann die xsd-Datei nicht importieren. Irgendwelche Kommentare oder Lösungen? – George2

+1

OK, interessant - ich musste das nie selbst machen, aber ich bin überrascht. Nun, eine Möglichkeit besteht darin, die Metadaten selbst herunterzuladen, sie zu einer großen statischen WSDL zusammenzustellen und diese WSDL dann den Kunden Ihres Webdienstes zu präsentieren, anstatt dass der Dienst die WSDL automatisch erstellen muss. –

+0

Danke Marc, ich weiß, es funktioniert. Meine Frage ist, ob von web.config, haben wir irgendeine Option, an eine andere IP-Adresse als den Computernamen zu binden? Sie können in web.config sehen, dass ich den Computernamen oder die IP-Adresse nicht zugewiesen habe. Ich bin mir nicht sicher, ob wir dieses Verhalten überschreiben können. Irgendwelche Kommentare? – George2

1

ich das gleiche Problem hatte und Ihren Beitrag gesehen, während für Antworten auf mein eigenes Problem suchen.

Ich denke, ich habe eine Lösung gefunden, die die IIS-Standortbindung zu der der IP ändern sollte. Ich verstehe immer noch nicht, warum dies keine Einstellung in der .config-Datei sein kann.

Hier ist der Link zu der Lösung, die ich gefunden habe (http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx).

Hier ist ein Link zu meinem Beitrag zu meinem Problem (.NET WCF service references use server name rather than IP address causing issues when consuming).

Hier ist ein Link zu meiner Post über das Finden der Lösung (WCF (hosting service in IIS) - machine name automattically being picked up by WCF rather than IP?).

Verwandte Themen