3

この「オブジェクト参照がオブジェクトのインスタンスに設定されていない」という問題が何度も出てきたことは理解していますが、私が調べたすべての回答が役に立たないようです。

ここに私の WSDL があります: https://app.20-20insights.com/testepos/servicetrx.svc?wsdl

BeginTrx() 関数を呼び出そうとしていますが、エラーが発生します。

アドバイスやヘルプをいただければ幸いです。

ありがとう、マーティン。

TrxIdentifier オブジェクトの設定

$trxIdentifier = new TrxIdentifier;

$trxIdentifier->ClientId = 9372490002639296;
$trxIdentifier->DeviceId = "123";
$trxIdentifier->OpId = "123";
$trxIdentifier->PosDescription = "123";
$trxIdentifier->PosId = "123";
$trxIdentifier->PosTxnId = "123";
$trxIdentifier->SiteId = "12312";
$trxIdentifier->Token = "3";
$trxIdentifier->TrxdateTime = new DateTime;

通話を実行しています...

$client = new SoapClient($wsdl,  array('trace'=>true,
'exceptions'=>true,
'classmap'=>array('TrxIdentifier'=>"TrxIdentifier", 'MemberInfo'=>"MemberInfo", 'Response'=>"Response", 'MemberDetail'=>"MemberDetail")));

$response = $client->BeginTrx($trxIdentifier );

エラー :

Object reference not set to an instance of an object.
a:InternalServiceFaultObject reference not set to an instance of an object.Object reference not set to an instance of an object. at CatalystSpsTrx.Contracts.Service.ServiceTrx.BeginTrx(MemberInfo& mem, TrxIdentifier conTrx) in C:\Projects\2010\CatTrxServices\CatalystSpsTrx.Contracts\Service\ServiceTrx.cs:line 38
 at _dynamic_CatalystSpsTrx.Contracts.Service.ServiceTrx.BeginTrx(Object , Object[] )
 at Spring.Reflection.Dynamic.SafeMethod.Invoke(Object target, Object[] arguments)
 at Spring.Aop.Framework.DynamicMethodInvocation.InvokeJoinpoint()
 at Spring.Aop.Framework.Adapter.AfterReturningAdviceInterceptor.Invoke(IMethodInvocation invocation)
 at Spring.Aop.Framework.Adapter.ThrowsAdviceInterceptor.Invoke(IMethodInvocation invocation)
 at CompositionAopProxy_d0e73463863e4ccd9c2db0a96530bd0d.BeginTrx(MemberInfo& mem, TrxIdentifier conTrx)
 at ServiceTrx.BeginTrx(MemberInfo& mem, TrxIdentifier conTrx)
 at SyncInvokeBeginTrx(Object , Object[] , Object[] )
 at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
 at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.NullReferenceException
4

1 に答える 1

3

このエラーは、入力構造が間違っているために発生します。WSDL には、次の方法で呼び出す必要があると記載されています。

$response = $client->BeginTrx(array('trx' => $trxIdentifier));

WSDL を見てみましょう。 service のルート入力定義は次のBeginTrxとおりです。

<wsdl:message name="IServiceTrx_BeginTrx_InputMessage">
    <wsdl:part name="parameters" element="tns:BeginTrx"/>
</wsdl:message>

ご覧のとおり、入力の型はBeginTrxです。WSDL に従うと、次のように定義されていることがわかります。

<xs:element name="BeginTrx">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="trx" nillable="true" type="tns:TrxIdentifier"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

BeginTrxパラメータ名がtrxtype で、値が type であることがわかりますTrxIdentifier

再び WSDL に従うと、次のようにTrxIdentifier定義されます。

<xs:complexType name="TrxIdentifier">
    <xs:sequence>
    <xs:element minOccurs="0" name="ClientId" type="xs:int"/>
    <xs:element minOccurs="0" name="DeviceId" nillable="true" type="xs:string"/>
    .................
    </xs:sequence>
</xs:complexType>
于 2012-05-30T10:44:57.423 に答える