2016-12-05 14 views
1

オーケー3時間を検索し、さまざまなオプションを試した後、私はもはやこれを解決する方法を任意の手掛かりを持っていないので...外部Webサービス「内部エラー」

状況:
当社の全国のパケット配達( Die Post)は、アドレスが存在するかどうかを確認するWebサービスを提供します。 私はそれらに連絡し、アプリケーションのユーザー名とパスワードと.wsdlファイルを受け取りました。
ダウンロードしたファイルへのサービス参照を作成しましたが、問題なくクラスを使用できます。今

問題:
私たちは、私がしようとしたとき、私はちょうどサービスのいずれかからコードを貼り付けると、現在の1にすべてを設定し、コピー、しかし、以前のプログラマは、認証およびすべてのものを使用して設定2つの他のWebサービスを持っていますレスポンスを得るために、私はいつもエラー(内部エラー)を受け取りますが、これ以上の情報はありません。
私は(完全に正常に動作します)SOAPUIの1に最後の要求と要求からの唯一の違いを取得する方法は、それが
<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>

現在のコードである代わりに「<soapenv: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(); 
} 

誰がどのようにこの問題を解決/ DEBUGにアイデアを持っていますか? ありがとう、よろしくお願いします

答えて

0

perlこのようにしています。多分これは...あなたのadrRequestHouseKey = 0を追加する必要が

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, 
); 
0

をいくつかのインスピレーションを与えることができます。これは必須の入力です。わからない場合は0に設定することができます。それ以外の場合、サービスはエラーを返します。

関連する問題