gpt4 book ai didi

delphi - Delphi 中的 SOAP 客户端 "The handle is in the wrong state for the requested operation"

转载 作者:行者123 更新时间:2023-12-03 14:42:09 25 4
gpt4 key购买 nike

我在 Visual Studio 中只需单击 3 次,就构建了世界上最愚蠢、最简单的 SOAP 服务器。 Visual Studio 2010 中的具体步骤: 首先创建一个新项目作为 Web 应用程序,然后添加一个类型为 Web 服务的新项目。 (参见已接受的答案 here 的图片。)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;

当我尝试运行此方法时,如下所示:

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;

我得到的错误是这样的:

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'.

当我将上面的 url 粘贴到 Web 浏览器中时,该 URL 工作正常,因此 Delphi 中的 SOAP 代码往往不会注意到 HTTP 故障的通常答案似乎不太可能。相反,我似乎要么 (a) 在 WinInet 中遇到损坏(已知在某些版本的 Windows 中会发生),要么 (b) 做错了什么?

在我看来,任何同时安装了 Visual Studio 和 Delphi 的人都应该能够尝试让 Visual Studio 中的虚拟启动 Soap 服务器与 Delphi 中的 Soap 客户端进行通信,而无需任何努力。但我无法弄清楚最简单的事情。

最佳答案

曾经有一次关于内河码头工作人员 Bruneau Babet 的对话中的错误进行了讨论,该对话现已从内河码头论坛中删除。

布鲁诺说:

Hello,

I've posted a patched version of SOAPHTTPTrans.pas that contains a fix for this issue here:

[forum link redacted, it didn't work anymore anyways, the post is gone]

You may still override the event as described in the C++Builder section referred; or, much simpler, at least for Delphi users, simply add the updated SOAPHTTPTrans.pas to your app's project. Let us know if that does not work for you.

Cheers,

Bruneau

您可以从以下pastebin link获取原始论坛格式的修复和相关注释。以及 bitbucket因此您不必从周围的文本中提取文件。

Warren 更新 2016: 有人尝试在 Delphi XE 上使用此修复程序,但我已被告知此修复程序在 Delphi XE 中对他们不起作用。如果对 bitbucket 中的代码进行任何进一步更新以解决剩余的错误,我们将不胜感激。

关于delphi - Delphi 中的 SOAP 客户端 "The handle is in the wrong state for the requested operation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com