War*_* P 10 delphi soap delphi-xe
我在visual studio中构建了世界上最笨拙,最简单的SOAP服务器,大约3次点击.Visual Studio 2010中的确切步骤:首先将新项目创建为Web应用程序,然后添加Web服务类型的新项目.(有关图片,请参阅此处接受的答案.)soap服务器服务Service1有一个简单的方法GetData:
来自clientService1.pas的片段,使用WSDL导入器创建...
IService1 = interface(IInvokable)
['{967498E8-4F67-AAA5-A38F-F74D8C7E346A}']
function GetData(const value: Integer): string; stdcall;
function GetDataUsingDataContract(const composite: CompositeType2): CompositeType2; stdcall;
end;
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此方法时,如下所示:
procedure TForm3.Button1Click(Sender: TObject);
var
rio : THTTPRIO;
sv:IService1;
addr : string;
data : string;
begin
//addr := '....'; // url from visual studio 2010 live debug instance.
rio := THTTPRIO.Create(nil);
sv := GetIService1( true, addr, rio );
try
data := sv.GetData( 0);
Button1.Caption := data;
finally
sv := nil;
rio.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
ESOAPHTTPException:
The handle is in the wrong state for the requested operation -
URL:http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/ -
SOAPAction:http://tempuri.org/IService1/GetData'.
Run Code Online (Sandbox Code Playgroud)
当我将上面的url粘贴到Web浏览器中时,URL工作正常,因此通常的答案是Delphi中的SOAP代码倾向于不会注意到HTTP失败,这似乎不太可能.相反,我似乎(a)遇到WinInet中的破坏(已知在某些版本的Windows中发生),或者(b)做错了什么?
在我看来,任何安装了visual studio和delphi的人都应该能够尝试在Visual Studio中使用虚拟启动器Soap服务器与Delphi中的soap客户端进行通信,而不需要任何努力.但我无法弄清楚最简单的事情.
曾经有一段时间讨论过对话中的错误,现在很久以来,已经从Embarcadero论坛上删除了对话,这是一个embarcadero职员Bruneau Babet.
布鲁诺说:
你好,
我发布了一个修补版本的SOAPHTTPTrans.pas,其中包含此问题的修复程序:
[论坛链接编辑,反正它不再工作,帖子已经不见了]
您仍然可以按照C++ Builder部分中所述覆盖该事件; 或者,更简单,至少对于Delphi用户,只需将更新的SOAPHTTPTrans.pas添加到您应用的项目中.如果这对您不起作用,请告诉我们.
干杯,
布诺
您可以通过以下pastebin链接 和bitbucket在其原始论坛格式中获取修复及其相关说明,这样您就不必从周围文本中提取文件.
Warren 2016更新:有人尝试使用Delphi XE上的修复程序通知我,这个修补程序在Delphi XE中不起作用.任何进一步更新bitbucket中的代码,以解决剩余的错误将不胜感激.
| 归档时间: |
|
| 查看次数: |
10573 次 |
| 最近记录: |