2017-02-02 1 views
1

J'essaie de consommer un service WCF dans le contexte d'un complément. Excel Excel. J'utilise l'API C d'Excel exposée à .NET par la bibliothèque ExcelDNA. Le code de fonction est défini comme suit:ExcelDNA: Comment rendre un fichier de configuration WCF disponible pour mon Excel AddIn?

[ExcelFunction(Description = "Getting the WCF stack trace")] 
public static string GetWCFStackTrace(string name) 
{ 
    try 
    { 
     HTTPService.ExcelServiceClient client = new HTTPService.ExcelServiceClient("BasicHttpBinding_IExcelService"); 
     client.LogExcelRows("Hello World"); 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine(e); 
    } 
    return "function complete"; 
} 

Ce qui entraîne la trace de la pile comme indiqué ci-dessous. J'ai testé que dans le contexte d'exécution de l'Add-In, j'ai accès à la classe proxy comme généré par la référence de service (c'est-à-dire typeof(HTTPService.ExcelServiceClient) renvoie correctement pendant l'exécution).

Exception thrown: 'System.InvalidOperationException' in System.ServiceModel.dll 
    System.InvalidOperationException: Could not find endpoint element with name 'BasicHttpBinding_IExcelService' and contract 'HTTPService.IExcelService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this name could be found in the client element. 
     at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName) 
     at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration) 
     at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName) 
     at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address) 
     at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress) 
     at System.ServiceModel.ConfigurationEndpointTrait`1.CreateSimplexFactory() 
     at System.ServiceModel.ConfigurationEndpointTrait`1.CreateChannelFactory() 
     at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait) 
     at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef() 
     at System.ServiceModel.ClientBase`1..ctor(String endpointConfigurationName) 
     at ExcelDNATest.HTTPService.ExcelServiceClient..ctor(String endpointConfigurationName) in C:\Users\zach\Documents\Visual Studio 2015\Projects\ExcelDNATest\ExcelDNATest\Service References\HTTPService\Reference.cs:line 37 
     at ExcelDNATest.TestFunctions.HelloDna(String name) in C:\Users\zach\Documents\Visual Studio 2015\Projects\ExcelDNATest\ExcelDNATest\TestFunction.cs:line 163 

Comment puis-je inclure la configuration des terminaux dans le code compilé ExcelDNA?

=== EDIT

La réponse est ci-dessous

Répondre

1

En regardant la discussion dans Google Groupes HERE, L'auteur-ADN Excel mentionné que je devrais voir le

... .config file in the output directory next to the .xll file ... 

Dans le \bin\Debug\ répertoire J'ai vu un fichier appelé <slnName>.dll.config que j'ai renommé en <slnName>-AddIn.xll.config et le service fonctionne comme prévu maintenant. Je suppose que je devrais aussi avoir des fichiers <slnName>-AddIn64.xll.config. Mais attendra et verra. Incidemment, je pense avoir vu dans le fil de discussion du groupe Google que le fichier de configuration n'est pas copié dans le dossier de sortie. Cependant, j'ai trouvé que le fichier de configuration était copié dans le dossier de sortie et que je devais simplement le renommer. Je devrais également noter que j'utilise Excel-DNA v0.33.9.

2

Le nom du fichier de configuration dans le répertoire de sortie doit correspondre au nom du fichier .XLL créé par ExcelDNA.

par exemple.

MyApp-AddIn.xll ->MyApp-AddIn.xll.config

MyApp-AddIn64.xll ->MyApp-AddIn64.xll.config