微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 如何在调用Webservice期间阻止对话框(基本身份验证提示)

在delphi程序(作为服务运行)中,我需要调用一些web服务.
如果不重新修改基本身份验证,则调用可以正常工作.如果重新获得基本身份验证并且使用以下方式提供用户名/密码(在BeforePost中),则调用也可以正常工作:

InternetSetoption(Data,INTERNET_OPTION_USERNAME,...
InternetSetoption(Data,INTERNET_OPTION_PASSWORD,...

但是如果基本身份验证被重新获得,并且没有提供用户名/密码,则程序会提示输入用户名/密码(即服务中的NO-GO).

那么我怎么能发出信号,我不想要提示,而是一个错误

问题是,正如我可以看到的,在SOAPHTTPTrans函数中THTTPReqResp.Send(const ASrc:TStream):Integer; (第762行(第二次调用InternetErrorDlg i那个方法)).

EDIT1:
如果我在发送方法的开头(在SOAPHTTPTRANS中)更改Flags以包含INTERNET_FLAG_NO_AUTH,它可以正常工作.
但是如何在不改变SAOPHTTPTrans的情况下做到这一点(如果可能的话)?

EDIT2:

ws := THTTPRIO.Create(Self);
ws.URL := 'http://excample.com/ws.asmx';
ws.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
ws.HTTPWebNode.OnBeforePost := WebServiceCallBeforePost;
AvailabilityWebservice := (ws as AvailabilityServiceSoap);
stemp := AvailabilityWebservice.GetVersion;

其中AvailabilityServiceSoap是使用WSDL导入程序生成的接口.

解决方法

您可以创建一个继承自THTTPReqResp的新类,并覆盖send方法,以便您可以包含自己的标志.您应该能够使用新类将ws.HTTPWebNode设置为新节点.

就像是

ws := THTTPRIO.Create(Self);
MyNewNode := MyNewClass.Create;
ws.HTTPWebNode := MyNewNode;
ws.URL := 'http://excample.com/ws.asmx';
ws.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
ws.HTTPWebNode.OnBeforePost := WebServiceCallBeforePost;
AvailabilityWebservice := (ws as AvailabilityServiceSoap);
stemp := AvailabilityWebservice.GetVersion;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐