身份验证错误(身份验证失败)使用Sabre肥皂消息

时间:2016-01-18 13:27:40

标签: web-services wsdl sabre

我正在使用soap服务来验证saber的请求,如文档https://developer.sabre.com/docs/read/soap_basics/Authentication中所示。 我使用wsdl生成代理类。我把认证凭证放在代码中。这是我的测试代码:

using ConsoleApplication1.SessionReference1;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {

                // Set user information, including security credentials and the IPCC.
                string username = "my-username";
                string password = "my-password";
                string ipcc = "not-understand";
                string domain = "EXT";

                string temp = Environment.GetEnvironmentVariable("tmp");    // Get temp directory
                string PropsFileName = temp + "/session.properties";        // Define dir and file name
                DateTime dt = DateTime.UtcNow;
                string tstamp = dt.ToString("s") + "Z";

                //Create the message header and provide the conversation ID.
                MessageHeader msgHeader = new MessageHeader();
                msgHeader.ConversationId = "TestSession";       // Set the ConversationId

                From from = new From();
                PartyId fromPartyId = new PartyId();
                PartyId[] fromPartyIdArr = new PartyId[1];
                fromPartyId.Value = "WebServiceClient";
                fromPartyIdArr[0] = fromPartyId;
                from.PartyId = fromPartyIdArr;
                msgHeader.From = from;

                To to = new To();
                PartyId toPartyId = new PartyId();
                PartyId[] toPartyIdArr = new PartyId[1];
                toPartyId.Value = "WebServiceSupplier";
                toPartyIdArr[0] = toPartyId;
                to.PartyId = toPartyIdArr;
                msgHeader.To = to;

                //Add the value for eb:CPAId, which is the IPCC. 
                //Add the value for the action code of this Web service, SessionCreateRQ.

                msgHeader.CPAId = ipcc;
                msgHeader.Action = "SessionCreateRQ";
                Service service = new Service();
                service.Value = "SessionCreate";
                msgHeader.Service = service;

                MessageData msgData = new MessageData();
                msgData.MessageId = "mid:20001209-133003-2333@clientofsabre.com1";
                msgData.Timestamp = tstamp;
                msgHeader.MessageData = msgData;

                Security security = new Security();
                SecurityUsernameToken securityUserToken = new SecurityUsernameToken();
                securityUserToken.Username = username;
                securityUserToken.Password = password;
                securityUserToken.Organization = ipcc;
                securityUserToken.Domain = domain;
                security.UsernameToken = securityUserToken;


                SessionCreateRQ req = new SessionCreateRQ();
                SessionCreateRQPOS pos = new SessionCreateRQPOS();
                SessionCreateRQPOSSource source = new SessionCreateRQPOSSource();
                source.PseudoCityCode = ipcc;
                pos.Source = source;
                req.POS = pos;

                SessionCreatePortTypeClient s = new SessionCreatePortTypeClient();
                SessionCreateRS resp = s.SessionCreateRQ(ref msgHeader, ref security, req);

                //SessionCreateRQService serviceObj = new SessionCreateRQService();
                //serviceObj.MessageHeaderValue = msgHeader;
                //serviceObj.SecurityValue = security;
                //SessionCreateRS rs = new SessionCreateRS();

                //SessionCreateRS  = serviceObj.SessionCreateRQ(req);   // Send the request

                if (resp.Errors != null && resp.Errors.Error != null)
                {
                    Console.WriteLine("Error : " + resp.Errors.Error.ErrorInfo.Message);
                }

                else
                {
                  //  msgHeader = serviceObj.MessageHeaderValue;
                  //  security = serviceObj.SecurityValue;

                    Console.WriteLine("**********************************************");
                    Console.WriteLine("Response of SessionCreateRQ service");
                    Console.WriteLine("BinarySecurityToken returned : " + security.BinarySecurityToken);
                    Console.WriteLine("**********************************************");
                    string ConvIdLine = "convid=" + msgHeader.ConversationId;   // ConversationId to a string
                    string TokenLine = "securitytoken=" + security.BinarySecurityToken; // BinarySecurityToken to a string
                    string ipccLine = "ipcc=" + ipcc;   // IPCC to a string

                 //   File.Delete(PropsFileName);       // Clean up
                  //  TextWriter tw = new StreamWriter(PropsFileName);  // Create & open the file
                   // tw.WriteLine(DateTime.Now);       // Write the date for reference
                  //  tw.WriteLine(TokenLine);      // Write the BinarySecurityToken
                  //  tw.WriteLine(ConvIdLine);     // Write the ConversationId
                  //  tw.WriteLine(ipccLine);       // Write the IPCC
                  //  tw.Close();

                    //Console.Read();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Exception Message : " + e.Message);
                Console.WriteLine("Exception Stack Trace : " + e.StackTrace);
                Console.Read();
            }


        }
    }
}

请帮帮我

1 个答案:

答案 0 :(得分:0)

我没有详细检查代码的顺序,但检查您为组织和域设置的值:

string ipcc = "not-understand";
string domain = "EXT";

除非您故意屏蔽这些值,否则您应该在获得SOAP webservices帐户后从Sabre收到您的ipcc值。 SOAP API域的值通常是" DEFAULT"。

在dev studio上注册只能为您提供REST测试凭据(而不是SOAP),因此您可以使用此表单来请求SOAP测试凭据: https://developer.sabre.com/contact

最后,我还没有看到您用来测试SessionCreate服务的环境/目标网址... CERT是:https://sws3-crt.cert.sabre.com/