外部网络服务"内部错误"

时间:2016-12-05 13:49:05

标签: web-services request

Okey所以在搜索了3个小时并尝试了各种选项后,我不再有任何线索如何解决这个问题......

情况:
我们的全国包裹递送者(Die Post)提供了一个用于检查地址是否存在的Web服务。 我联系了他们,收到了应用程序的用户名和密码以及.wsdl文件 我对下载的文件进行了服务引用,可以毫无问题地使用这些类。

现在问题:
我们还有其他2个Web服务,前面的程序员使用身份验证和所有内容设置,我只是复制粘贴其中一个服务的代码并将所有内容设置为当前的一个,但是当我尝试获得响应时,我总是收到错误(内部错误),没有更多信息。
我找到了一种获取最后一个请求的方法,唯一的区别是请求与SoapUI中的一个请求(完全正常)是,而不是&#34; <soapenv:Header/>&#34;是的 <s:Header> <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://post.ch/AdressCheckerExtern/V4-01-00</Action> </s:Header>

目前的代码是:

 // Create Request
PostAdressChecker.AdressCheckerRequestType adrRequest = new PostAdressChecker.AdressCheckerRequestType()
{
    Street = strStrasse,
    HouseNbr = strHausnummer,
    Zip = strPlz,
    Town = strOrt,
    Params = new PostAdressChecker.AdressCheckerRequestTypeParams()
    {
        CallUser = "TU_99660_0001",
        SearchLanguage = "1",
        MaxRows = "10",
        SearchType = "10"
    }
};

BasicHttpBinding basicBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
{
    ReaderQuotas = { MaxStringContentLength = int.MaxValue },
    MaxReceivedMessageSize = int.MaxValue,
    SendTimeout = new TimeSpan(0, 2, 0)
};

PostAdressChecker.ACHePortTypeClient client;
client = new PostAdressChecker.ACHePortTypeClient(basicBinding, new EndpointAddress(strUrl));
client.Endpoint.Behaviors.Add(new PostSigningEndpointBehavior(strUsername, strPassword));            
SoapTracer RequestInterceptor = new SoapTracer();
client.Endpoint.Behaviors.Add(RequestInterceptor);

try
{
    PostAdressChecker.AdressCheckerResponseType adrResponse = client.AdrCheckerExterne(adrRequest);
}
catch (Exception ex)
{
    strError = ex.ToString();
}

有人知道如何调试/解决这个问题吗? 非常感谢和最好的问候

2 个答案:

答案 0 :(得分:0)

在perl中我是这样做的。也许这可以给你一些启发......

sub clientFactory {
     my $wsdl = XML::Compile::WSDL11->new('etc/adrCheckerExterne-V4-01-00.wsdl');
     $wsdl->importDefinitions('etc/adrCheckerExterne-V4-01-00.xsd');
     $wsdl->importDefinitions('etc/adrCheckerTypes-V4-01-00.xsd');
     my $basic_auth = sub {
         my ($request, $trace) = @_;
         my $authorization = 'Basic '.
             b64_encode "$adrCheckerUser:$adrCheckerPassword";
         $request->header(Authorization => $authorization );
         my $ua = $trace->{user_agent};
         $ua->request($request);
     };
     return $wsdl->compileClient(
         'AdrCheckerExterne',
         transport_hook => $basic_auth,
         aync => 1,
     );
};

my $client = clientFactory;

my $check = $client->(
    Params => {
        MaxRows => 100,
        CallUser => $adrCheckerUser,
        SearchLanguage => 1,
        SearchType => 1
    },
    FirstName => $first_name,
    Name => ${last_name},
    Street => ${street},
    HouseNbr => ${nr},
    Zip => ${zip},
    Town => ${town},
    HouseKey => 0,
    PboxAddress => 0,
);

答案 1 :(得分:0)

您需要将HouseKey = 0添加到adrRequest。这是必需的输入 - 如果您不知道,可以将其设置为0。否则服务将返回错误。