当前位置:编程学习 > C#/ASP.NET >>

哪位仁兄帮帮我吧 我已经郁闷了2个星期了 ADD web service 不行

我用的是VS2005 vc
不使用托管的话 错误error SDL1030 : sproxy.exe does not support extension of complexType.

使用托管的话 生成的代码不知道怎么使用 
哪位朋友帮帮我 谢谢 我的邮箱sunxiao420@yahoo.com.cn

--------------------编程问答-------------------- sproxy.exe 不支持 complexType 的扩展名 

SPROXY 不支持具有扩展的 complexTypes,即不支持“派生”和扩展它们的基类型的复杂类型。 --------------------编程问答-------------------- SPROXY.EXE:XML Web Service Proxy 產生器
SPROXY.EXE 是一命令列工具,它會產生原生 (Native) C++ 用戶端程式碼,可根據 WSDL 說明來存取 XML Web Service。

Visual C++ 專案系統使用此工具的時機為您使用加入 Web 參考對話方塊將 Web 參考加入原生 C++ 專案內,或當工具設成 [Web 服務 Proxy 產生器],並且在檔案的設定中將產生的 Proxy 語言設成 Native C++ 時。

以下顯示命令列語法:

 
sproxy [ options ] [ /out:outputfile ] input_location 

參數
options 
(選擇項) 為下列其中一項或多項: 
選項 說明 
/? 或 /help 顯示使用方式資訊。 
/nologo 隱藏著作權訊息。 
/nowarn 停用所有警告。 
/nopragma 不將「#pragma once」插入輸出檔。 
/noclobber 如果輸出檔已存在,就不覆寫。 
/nonamespace 不將 C++ 命名空間 (Namespace) 插入已產生的 Proxy 檔。依預設,SPROXY 會根據 WSDL 服務名稱插入命名空間。 
/namespace:<name> 將名為 <name> 的命名空間插入已產生的 Proxy 檔。依預設,SPROXY 會根據 WSDL 服務名稱插入命名空間。 
命名空間 必須是有效的 C++ 識別項。當 <name> 為空字串時,/namespace:<name> 選項具有和 /nonamespace 相同的效果。
 
/wsdl <input_location> 處理指定路徑 <input_location> 的 .wsdl 檔,而非 .discomap 檔 (預設值)。 

outputfile 
(選擇項) 產生的程式碼將要寫入的檔案名稱。如果該檔案存在,除非已指定 
/noclobber
,否則將會被覆寫。如果未指定 outputfile,SPROXY 將會根據 WSDL 服務名稱,在現行目錄中建立一個檔案。 
input_location 
在描述 XML Web Service 的檔案位置方面,系統會為該服務產生 Proxy 程式碼。input_location 可以是 URL 或是 .discomap 或 .wsdl 檔的檔案系統路徑。當您使用 .wsdl 檔時,請指定 
/wsdl
 選項。 
SPROXY.EXE 也可處理 results.discomap 檔。請注意,.discomap 檔包含 .wsdl 檔之本機複本的連結,並使用該結構描述 (Schema) 檔的本機複本。 

備註
SPROXY.EXE 將會產生衍生自 CSoapRootHandler 的 Proxy 類別範本和其範本引數。範本引數必須符合 SOAP 用戶端 archetype,並預設為 CSoapSocketClientT<>。

服務所公開的每一個 SOAP 方法都由 Proxy 類別中的方法代表。若要存取 XML Web Service,請建立 Proxy 類別的執行個體 (Instance),然後呼叫適當的方法。

SPROXY.EXE 位於 Visual C++ 安裝的 \vc7\bin 目錄中。

如需 SPROXY 所支援的型別清單,請參閱支援型別和以 ATL Server 建立之 XML Web Service 內的支援型別。

注意   SPROXY 產生的用戶端需要 MSXML3。在執行用戶端之前,您需要將 MSXML3 安裝在安裝產生之用戶端的機器上。
Xmlinst.exe 會以取代模式安裝 MSXML3。從下列 MSDN 網站下載 Xmlinst.exe 取代模式工具:http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/469/msdncompositedoc.xml。
如需使用 Xmlinst.exe 的詳細資訊,請參閱知識庫文件<PRB: Application Errors Occur After You Run Xmlinst.exe on Production Servers> (Q278636)。您可以在 MSDN Library CD-ROM 或是在 http://support.microsoft.com/support 中找到知識庫文件。
如需執行 MSXML3 的詳細資訊,請參閱以取代模式執行 MSXML 3.0。
注意   SPROXY 產生的標頭檔包含了 atlsoap.h。此檔案宣告 
[emitidl("restricted")];
。如果在碰到 
[module]
 屬性時,IDL 發出受到限制,就會發生錯誤。您可在程式碼中包含 atlsoap.h 之後的位置上使用 
[emitidl("true")];
 來啟用 IDL 發出 (atlextmgmt.h 和 atlsoap.h 包含了相同的 emitidl 宣告,因此上述方式亦適用)。
注意   SPROXY 產生的方法並不會在取值 (Dereferencing) 之前檢查指標參數是否為 
NULL
。請在將它們傳至 XML Web Service Proxy 類別內的方法前,先檢查指標是否為 
NULL

範例
以下的命令列將會產生包含 C++ Proxy 程式碼的 myservice.h 檔,以存取 WSDL 所述、自 http://myserver/myservice.dll?Handler=GenMyServiceWSDL 取得的 XML Web Service:

 複製程式碼 
sproxy /wsdl http://myserver/myservice.dll?Handler=GenMyServiceWSDL /out:myservice.h 

下列的命令列將產生包含 C++ Proxy 程式碼的輸出檔,以便存取從 results.discomap (此檔案包含了 .wsdl 檔之本機複本的連結) 所取得的 WSDL 所述之 XML Web Service:

 複製程式碼 
sproxy results.discomap 

如需更多使用 SPROXY 所產生 Proxy 類別的程式碼範例,請參閱 SOAP 用戶端程式碼,並檢視 DataSetConsumer 範例。 --------------------编程问答-------------------- 那就使用托管吧 --------------------编程问答-------------------- 使用托管的吧.

直接在VS的项目的右键菜单中ADD web service.

VS会自动生成一个reference.cs,并修改config文件
直接实例化reference.cs中的类,并调用函数即可。很简单。 --------------------编程问答-------------------- 帮你顶一下 --------------------编程问答-------------------- 帮你顶一下 --------------------编程问答-------------------- 顶一下 --------------------编程问答--------------------
引用楼主 sdy63420 的帖子:
 错误error SDL1030 : sproxy.exe does not support extension of complexType. 

可能是WSDL有问题.贴出来看看
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,