2008-10-06 13 views
1

J'essaie d'appeler un service Web à partir du module Excel 2003. La façon dont je l'ai mis en œuvre crée une bibliothèque COM .NET avec toutes les classes/méthodes dont j'ai besoin d'être exposé. Lorsque j'essaie d'appeler une méthode qui interroge un service Web à partir d'Excel, l'exécution s'arrête sur cette ligne sans aucune erreur. Peut-être que cela a à voir avec les références? J'utilise Microsoft.Web.Services2.dll. J'ai essayé de le mettre dans C: \ WINDOWS \ SYSTEM32 - pas de chanceAppel de l'encapsuleur du service Web COM .NET à partir d'Excel

Merci!

+0

Y a-t-il une chance de laisser tomber le code que vous utilisez? – Kev

Répondre

1

Pour résoudre le problème, j'ai utilisé Access au lieu d'Excel. Dans Access, il me montrait des erreurs. Il s'est avéré que l'emplacement de tous les assemblages de référence devrait être l'emplacement de l'application de l'appelant (dans ce cas c'était C: \ Program Files \ Microsoft Office \ OFFICE11). Sencondly mes proxies de services Web chargeaient les urls de point de terminaison du fichier .config, qui dans ce contexte était C: \ Program Files \ Microsoft Office \ OFFICE11 \ MSACCESS.EXE.config

2

Je ne suis pas sûr si je reçois l'image entière , mais j'espère que cela aidera. Je pense que vous avez Excel vba appelant dans .NET via une interface COM et ensuite dans un svc web SOAP.

Vous devez avoir le bon PIA installé et référencé par votre assembly .NET. Votre interface COM devrait ressembler à ceci:



[Guid("123Fooetc...")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
    public interface IBar 
    { 
     [DispId(1)] 
     void SomeMethod(Excel.Range someRange); 
    } 

implémentent l'interface avec quelque chose de classe comme ceci:


[Guid("345Fooetc..")] 
    [ClassInterface(ClassInterfaceType.None)] 
    [ProgId("MyNameSpace.MyClass")]  
    public class MyClass : IBar 
    { 
     public void SomeMethod(Excel.Range someRange) 
     {...} 
    } 

La première chose que je voudrais faire est de remplacer votre appel de service Web avec un réel simple, méthode dans votre code .NET, pour vous assurer que votre interface et votre wrapper interop fonctionnent correctement.

Une fois que votre squelette fonctionne correctement, vous pouvez envisager d'appeler votre service avec une méthode HTTP au lieu d'utiliser SOAP. Par exemple, voici un appel simple utilisant HTTP GET:


    string resource = yourUrl; 
    using (WebClient web = new WebClient()) 
    { 
    web.Credentials = CredentialCache.DefaultCredentials; 
    someXml = web.DownloadString(resource); 
    } 
    return someXml; // or do something interesting with Excel range