Frage

Ich versuche, Excel mit einem WCF -Dienst zu verbinden, aber ich kann nicht einmal einen trivialen Fall zum Laufen bringen ... Ich erhalte einen ungültigen Syntaxfehler, wenn ich versuche, den Proxy in Excel zu erstellen. Ich habe den Visual Studio -Debugger an Excel angehängt und bin angezeigt, dass der eigentliche Fehler "Schnittstelle nicht gefunden" ist. Ich weiß, dass der Dienst funktioniert, da der von Visual Studio erstellte Testcient in Ordnung ist ... also liegt das Problem in der VBA -Moniker -Zeichenfolge.

Ich hoffe, eines von zwei Dingen zu finden:

1) eine Korrektur meiner Spitznamen, die diese Arbeit macht, oder

2) Ein vorhandenes Beispielprojekt zum Herunterladen, das die Quelle sowohl für den Host als auch für den Kunden hat, der funktioniert.

Hier ist der Code für meinen VBA -Client:

Dim addr As String
addr = "service:mexAddress=net.tcp://localhost:7891/Test/WcfService1/Service1/mex, "
addr = addr + "address=net.tcp://localhost:7891/Test/WcfService1/Service1/, "
addr = addr + "contract=IService1, contractNamespace=http://tempuri.org, "
addr = addr + "binding=NetTcpBinding_IService1, bindingNamespace=""http://tempuri.org"""

MsgBox (addr)

Dim service1 As Object
Set service1 = GetObject(addr)

MsgBox service1.Test(12)

Ich habe den folgenden Service:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(int value);
}

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

Es hat die folgende Konfigurationsdatei:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="WcfService1.Service1Behavior"
        name="WcfService1.Service1">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          contract="WcfService1.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:7891/Test/WcfService1/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService1.Service1Behavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Bearbeiten:

Der aktualisierte Spitzname, der für mich funktioniert hat, war wie folgt

Dim addr As String
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"", "
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"", "
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/"", "
addr = addr + "binding=""NetTcpBinding_IService1"", bindingNamespace=""http://tempuri.org/"""
War es hilfreich?

Lösung 2

Ich konnte dies beheben, indem ich einige Zitate zu einigen wichtigen Standorten in der Spitznamen hinzugefügt hat. Leider gibt es Ihnen weniger als nützliches Feedback, den Debugger an Excel anzuhängen. Wenn Sie also behoben werden, ist es eine Übung in Raten und Überprüfen. In VBA benötigen Sie ein doppeltes Zitat ("") um jede Saite im Spitznamen. Darüber hinaus muss der Begriff "Mex" in der MEX -Adresse aktiviert werden, obwohl ich die Adresse im Vertrag als niedrigerer Fall angegeben habe. Stelle dir das vor.

Andere Tipps

Ich würde einen Client als .NET -Objekt erstellen, ihn als COM -Objekt registrieren und über COM von VBA auf ihn zugreifen

UPDATE: Ich habe diesen Artikel gefunden:http://msdn.microsoft.com/en-us/library/ms752245.aspx

Es scheint, dass Sie, um den Spitznamen zu verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top