VC使用GSOAP(2.8.14)調用C#WCF服務

來源:互聯網
上載者:User

標籤:

  我在網上找了好多的這方面的文章,真正能夠實現出來的幾乎沒有。

  只有我在1年前下載並調試成功的案例。那麼GSOAP是比較複雜的實現過程,需要學習的理論知識也比較多,需要深入瞭解的可以到官網上去下載。

  那麼調試時借鑒別人的文章是非常有用的,但是一定要看清對方調試工具的版本號碼

1.1.1.1         環境

l  VS2012

l  GSOAP 2.8.14 (請使用指定版本)

l   WIN7 IIS

1.1.1.2         下載GSOAP程式包  GSOP2.8

1.1.1.3          C#程式建立WCF服務,並部署到IIS中。

 

public interface IService1

    {

        //[OperationContract]

        //string GetData(int value);

        //[OperationContract]

        //CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: 在此添加您的服務作業

        [OperationContract]

        double add(double a, double b);

        [OperationContract]

        double sub(double a, double b);

        [OperationContract]

        double mul(double a, double b);

        [OperationContract]

        double div(double a, double b);

    }

  public class Service1 : IService1

    {

        // TODO: 在此添加您的服務作業

        public double add(double a, double b)

        {

            return a + b;

        }

        public double sub(double a, double b)

        {

            return a - b;

        }

        public double mul(double a, double b)

        {

            return a * b;

        }

        public double div(double a, double b)

        {

            return a / b;

        }

 

    }

1.1.1.4         找到 \GSOAP\gsoap-2.8\gsoap\bin\win32

1.1.1.5         用CMD進入到該目錄下面,如

                       

圖表 5.9.6?1

1.1.1.6         輸入命令產生C++ XXXX.h檔案

命令如下:

 

wsdl2h -s -t typemap.dat -o service2.h 

http://localhost:52852/WCFService1/Service.svc?wsdl

Typemap.dat 檔案要放在  GSOAP\gsoap-2.8\gsoap\bin\win32目錄下,執行完成該命令將會產生service2.h檔案。

 

圖表 5.9.6?2

1.1.1.7         在輸入 產生soapStub.h,soapC.cpp等檔案。

    將service2檔案拷貝到gsoap\import檔案 夾後執行

命令: soapcpp2   -C -I D:\soft\GSOAP\gsoap-2.8\gsoap\import service1.h -L -i –x

 

soapcpp2   -C -I  F:\VC使用GSOAP調用C#WCF服務\gsoap-2.8\gsoap\import\ service2.h -L -i -x

 

圖表 5.9.6?3

執行結果

 

圖表 5.9.6?4

1.1.1.8         把產生的檔案COPY到VC項目中,並添加到VC項目中

因為沒有使用STL,所以需要包含stdsoap2.h和stdsoap2.cpp,這兩個檔案在GSOAP裡可以找到。

1.1.1.9         設定新加的所有.cpp檔案不要使用先行編譯頭

 

圖表 5.9.6?5

1.1.1.10     編譯串連錯誤處理:

Stdsoap2/h 去掉 :extern SOAP_NMAC struct Namespace namespaces[];

十:添加執行代碼:

const char* server="http://XXXXX:81/Service1.svc"; //"http://localhost/srv/srv.asmx";

BasicHttpBinding_USCOREIService1Proxy ss(server,SOAP_C_UTFSTRING);

double aa=10;

double bb =20;

_tempuri__add tempuri__add; 

tempuri__add.a=&aa;

tempuri__add.b =&bb;

_tempuri__addResponse tempuri__addResponse ;

if (ss.add(&tempuri__add,&tempuri__addResponse)==SOAP_OK)

{

double cc=*tempuri__addResponse.addResult;

ss.destroy();

return 0 ;

}

if (ss.error)

{

ss.soap_stream_fault(std::cerr);

ss.destroy();

return 0 ;

}

 

圖表 5.9.6?6

1.1.1.11     運行出錯處理

soapBasicHttpBinding_USCOREIService1Proxy.cpp,BasicHttpBinding_USCOREIService1.nsmap 檔案中的namespaces[]替換

 

 

1.1.1.12     已成功實現C++調用C# WCF服務

 

圖表 5.9.6?7

n  在工程中定義 WITH_NONAMESPACES 宏

n  嘗試 "#include "namp.nsmap" "

 

VC使用GSOAP(2.8.14)調用C#WCF服務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.