2017-04-10 4 views
0

Also habe ich einen Web-Service in C# geschrieben, die eine Methode zum Signieren eines Hash hat. Dieser Webdienst ist eine WCF-Dienstanwendung. Dann habe ich eine C# -Konsolenanwendung erstellt, wo ich eine Funktion geschrieben habe, um diesen Webdienst zu nutzen. Die Deklaration der Funktion, die den Web-Service-Anrufe ist, dass:C++ - Wrapper-Klasse für C# -Klasse Aufruf eines Web-Service

class Program 
{ 
public byte[] callWS(string alias, byte[] myHash,string myPassword) 
{ 
    IhashSignSVCClient client = new IhashSignSVCClient(); 
     byte[] signedData= client.SignandReturn(alias, myhash, myPassword); 
     if (signedData != null) 
     { 
      Console.WriteLine(signedData); 
      return signedData; 
     } 
     return null; 

} 
} 

Dieser Web-Service funktioniert gut. Jetzt möchte ich eine C++ - Wrapper-Klasse über diese C# -Methode erstellen, weil ich diesen Web-Service aus nicht verwaltetem Code aufrufen möchte und ich dachte, dass das Erstellen einer C++ - Wrapperklasse eine gute Idee ist. Kann mir jemand mit einer Art Struktur dieser Wrapper-Klasse helfen? Ich habe die Konvertierungen zwischen C++ und C# nicht sehr gut verstanden. Ich habe eine C++ CLR-Klassenbibliothek mit einer ref-Klasse erstellt, die meine C++ - Methode enthält, um diese C# -Methode aufzurufen, aber ich habe immer noch Probleme mit dem Typ der Parameter dieser Funktion.

Antwort

1

Wenn Sie an nativem (nicht verwaltetem) C++ festhalten möchten (statt C++/CLI zu verwenden), ist die beste Option möglicherweise WWSAPI, da dies einen WCF-Dienst direkt aus C++ aufrufen kann. Obwohl es sich um eine C-basierte API handelt, ist es ein wenig lästig, von C++ aus zu verwenden.

Ansonsten gibt es umfangreiche Dokumentation über C++/CLI here; insbesondere marshaling.

+0

Vielen Dank. Ich wollte nicht mit Windows Web Services arbeiten und ich arbeitete mit C++/CLI. – Paul