EPS_EXT_ProfileReadRQ soap api をテストするための簡単なプロジェクトを作成しました。これは、soapUI ツールを使用して問題なく消費できます。API を介してプロファイルを取得するための非常に単純で基本的なシナリオ。VS2013 で「サービス参照の追加」を使用してプロキシ クラスを構築し、呼び出しを実装するための簡単なインターフェイスを作成しました。私のインターフェースは次のようになります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using getSabreProfile.EPS_ProfileReadService;
namespace getSabreProfile.Service
{
public interface IGetProfileService
{
Sabre_OTA_ProfileReadRS getProfile(string Token, string Domain, string ProfileId);
}
public class GetProfileService : IGetProfileService
{
private EPS_ProfileReadPortTypeClient service = new EPS_ProfileReadPortTypeClient();
public GetProfileService()
{
}
public Sabre_OTA_ProfileReadRS getProfile(string Token, string Domain, string ProfileId)
{
var _security = new Security
{
BinarySecurityToken = Token
};
var _messageHeader = new MessageHeader
{
From = new From
{
PartyId = new PartyId[1] { new PartyId { Value ="Client" } }
},
To = new To
{
PartyId = new PartyId[1] { new PartyId { Value = "Sabre" } }
},
CPAId = "CL41",
ConversationId = "Profiles",
Action = "EPS_EXT_ProfileReadRQ",
MessageData = new MessageData
{
RefToMessageId = "Profiles Get Profile",
Timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}
};
var _sabre_OTA_ProfileReadRQ = new Sabre_OTA_ProfileReadRQ
{
Version = "6.19",
Item = new ProfileType
{
TPA_Identity = new ProfileTypeTPA_Identity
{
UniqueID = ProfileId,
DomainID = Domain,
ClientCode = "TN",
ProfileTypeCode = ProfileTypeInfo.TVL,
ClientContextCode = "MYS"
}
}
};
var response = service.EPS_ProfileReadRQ(ref _messageHeader, ref _security, _sabre_OTA_ProfileReadRQ);
return response;
}
}
}
次に、プログラムからインターフェイスをインスタンス化します。
private void btnGetProfile_Click(object sender, EventArgs e)
{
GetProfileService _getProfile = new GetProfileService();
var res = _getProfile.getProfile(tbToken.Text, tbDomain.Text, tbProfileId.Text);
}
アプリはエラーなしでコンパイルされますが、実行時にエラーが発生します。
There was an error in serializing one of the headers in message EPS_ProfileReadRQRequest: 'Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'getSabreProfile.EPS_ProfileReadService.IgnoreReadSubjectAreasType' to 'getSabreProfile.EPS_ProfileReadService.PartialReadSubjectAreasType'
error CS0029: Cannot implicitly convert type 'getSabreProfile.EPS_ProfileReadService.PartialReadSubjectAreasType' to 'getSabreProfile.EPS_ProfileReadService.IgnoreReadSubjectAreasType'
VS2013 が Web サービスのプロキシ クラスを正しく生成しておらず、型のマッピングが正しく解析されていないように思えますが、解決策を見つけることに固執しています。プロキシ クラスのコードを手動で調整するつもりですが、どこを何を変更すればよいかわかりません 笑!.. 誰かがここで助けてくれることを願っています。
ありがとう!