J'essaye de me connecter à Excel à un service WCF, mais je n'arrive même pas à faire fonctionner un cas trivial ... J'ai une erreur de syntaxe invalide quand j'essaie de créer le proxy dans Excel. J'ai attaché le débogueur visuel de studio pour exceler, et obtenir que la vraie erreur est "l'interface non trouvée". Je sais que le service fonctionne parce que le client de test créé par Visual Studio est correct ... donc le problème est dans la chaîne moniker VBA."interface introuvable" dans WCF Moniker sans inscription pour excel
Je suis l'espoir de trouver une des deux choses:
1) une correction à ma chaîne de sobriquet qui fera ce travail, ou
2) un exemple de projet existant télécharger qui a la source pour l'hôte et le client qui fonctionne.
Voici le code pour mon client VBA:
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)
J'ai le service suivant:
[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);
}
}
Il a le fichier de configuration suivante:
<?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>
Editer:
Le sobriquet mis à jour qui a fonctionné pour moi était la suivante
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/"""
La même erreur se produit également lorsqu'un service WCF expose des méthodes avec des types non-primitifs en tant que paramètres ou types de retour. – ssgonell