4

Acumatica の Web サービスを使用して基本的な統合を実行しようとしています。残念ながら、ログインに問題があります。ドキュメントによると、このプロセスは次のようになります。

apitest.Screen context = new apitest.Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.AllowAutoRedirect = true;
context.EnableDecompression = true;
context.Timeout = 1000000;
context.Url = "http://localhost/WebAPIVirtual/Soap/APITEST.asmx";
LoginResult result = context.Login("admin", "E618");

十分に単純です。しかし、WSDL ファイルを作成して Acumatica から Visual Studio にインポートした後、Screen オブジェクトがないことがわかりました。ただし、同様の Login() メソッドを持つ ScreenSoapClient オブジェクトがあります。

ScreenSoapClient context = new Acumatica.ScreenSoapClient("ScreenSoap");
LoginResult result = context.Login("username", "password");

その部分は機能します。実際、LoginResult はセッション ID を提供します。ただし、次のようなサービスを呼び出そうとすると、次のようになります。

CR401000Content cr401000 = context.CR401000GetSchema();

次のエラーが表示されます: System.Web.Services.Protocols.SoapException: サーバーは要求を処理できませんでした。---> PX.Data.PXNotLoggedInException: エラー #185: 現在ログインしていません。

私たちが使用している Acumatica のバージョンは若干新しいように見えますが、Screen() オブジェクトが利用できない理由はわかりません。したがって、間違ったユーザー名/パスワードを試してみると、Login() は失敗します (当然のことです)。私が知る限り、ScreenSoapClient クラスは web.config のサービス モデルの詳細を使用しているため、エンドポイント アドレスやその他の詳細を取得しています。

私が行方不明または間違っていることはありますか?

4

2 に答える 2

3

ご覧のとおり、WCF を使用してサービス参照を作成します。したがって、サービス バインディングで Cookie を有効にする必要があります。

var binding = new BasicHttpBinding()
{
    AllowCookies = true
};

var address = new EndpointAddress("http://localhost/WebAPIVirtual/Soap/APITEST.asmx");

var c = new ServiceReference1.ScreenSoapClient(binding, address);

または、古い asmx Web サービス リファレンス ( http://msdn.microsoft.com/en-us/library/bb628649.aspx )を使用できます。その後、すべてが Acumatica のドキュメントと同じになります。

于 2014-09-17T07:56:33.700 に答える
0

上記のコメントで述べたように、Acumatica の担当者と連絡を取ることができました。彼は、私たちのプロジェクトでサービス参照を削除して再作成し、再試行するように依頼しました。どうやらうまくいき、「エラー #185: 現在ログインしていません」というエラーは消えました。

于 2014-10-14T13:45:41.093 に答える