如何检查WebService是否可用或是否具有有效的URL?
我正在使用Delphi向导导入并自动生成必要的WSDL函数。
向导为我创建的函数,如果WSDL或URL错误,则不会抛出异常,也不会返回null对象。只有当我调用返回的WSDL类的函数时,它才会抛出一个奇怪的异常,即XML-String没有有效的“text / html”样式。
这是自动生成的WSDL函数:
function GetcheckVatPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): checkVatPortType;
const
defWSDL = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
defURL = 'http://ec.europa.eu/taxation_customs/vies/services/checkVatService';
defSvc = 'checkVatService';
defPrt = 'checkVatPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as checkVatPortType);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
// ************************************************************************ //
// Namespace : urn:ec.europa.eu:taxud:vies:services:checkVat
// Transport : http://schemas.xmlsoap.org/soap/http
// Stil : document
// Verwenden von : literal
// Bindung : checkVatBinding
// Service : checkVatService
// Port : checkVatPort
// URL : http://ec.europa.eu/taxation_customs/vies/services/checkVatService
// ************************************************************************ //
checkVatPortType = interface(IInvokable)
['{0F901373-2432-32E2-C99D-95B53AE83C79}']
// Entpacken nicht möglich:
// - Mehrere strenge out-Elemente gefunden
function checkVat(const parameters: checkVat): checkVatResponse; stdcall;
// Entpacken nicht möglich:
// - Mehrere strenge out-Elemente gefunden
function checkVatApprox(const parameters: checkVatApprox): checkVatApproxResponse; stdcall;
end;
如果defWSDL
或defURL
无效或不可用,则会返回初始化的checkVatPortType
类/接口。之后在返回的接口上调用函数(checkVatPortType.checkVat
),我得到了一个奇怪的异常。
这意味着,如果WebService不可用,则用户会收到“XML-String没有有效”text / html“format”的消息。这没有描述问题。
答案 0 :(得分:3)
这是“按设计”。仅调用Web服务将导致网络操作,只有这样网络层才会失败或成功。
创建Web服务引用就像拿起电话一样,执行Web服务的方法就像是“拨号”。
更新:检测无效URL /不存在服务器的一种解决方法是在启动时使用HTTP客户端组件(Indy,Synapse),仅进行运行状况检查。将它传递给WSDL URL,然后尝试获取它。如果失败,您将知道服务器无法访问。
您还可以使用Web服务端点URL(针对特定服务方法)执行GET或POST。如果您使用HTTP GET,许多SOAP服务器将响应错误消息,如“不支持方法”,但至少有响应。