【问题标题】:Calling a webmethod from C++从 C++ 调用 web 方法
【发布时间】:2009-04-02 16:40:53
【问题描述】:

我正在从 C++ 调用网络方法。 [webmthod]定义如下

[WebMethod]
public string UploadFile(byte[] data)

这是我在 C++ 中的称呼

 static TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded";
     static TCHAR frmdata[] = "data=temp.txt";
  HINTERNET hSession = InternetOpen("MyAgent",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
  HINTERNET hConnect = InternetConnect(hSession, "localhost",
      INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
  HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", "my/WebService.asmx/UploadFile", NULL, NULL, 0, 0, 1);
  HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));

有了这个;我收到以下错误。

System.ArgumentException:无法将 temp.txt 转换为 System.Byte。

那么如何传入 frmdata[] 以便在 webservice 上将其转换为 System.byte 呢?

谢谢!

【问题讨论】:

    标签: web-services httprequest wininet


    【解决方案1】:

    我最终从 C++ 进行 HTTP UPLOAD..

    【讨论】:

      【解决方案2】:

      供将来参考:考虑使用 ATL Server。您可以在 www.codeplex.com/AtlServer(Microsoft 从最新的 ATL 9.0 SDK 中提取 ATL Server 并将其移至 codeplex)和 MSDN:msdn.microsoft.com/en-us/library/exb5b09w 找到最新信息和更多信息(VS.80).aspx

      对于 C++,您可以生成一个代理头文件,该文件巧妙地包装了使用 ATL soap 调用 Web 方法所需的所有内容,以及您希望处理所有网络调用的任何 ATL Soap 客户端(WinInet、WinHTTP、Soap Socket 等)。要生成此文件,您可以使用 sproxy.exe 工具。那么web方法调用就变成了简单的类方法调用。

      参考:msdn.microsoft.com/en-us/library/994721ak(VS.80).aspx Sproxy 工具:msdn.microsoft.com/en-us/library/ztta389h(VS.80).aspx WS 调用示例:msdn.microsoft.com/en-us/library/ftdya1d6(VS.80).aspx

      【讨论】:

        猜你喜欢
        • 2013-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 2016-03-26
        相关资源
        最近更新 更多