2015-09-14 5 views
0

Apple выпустила WSDL нового поколения 15 августа этого года (2015), и большое изменение состояло в том, что каждый вызов WSDL должен был быть подтвержден сертификатом файл.Как подключить X509Certificate2 к webservice (конкретный Apple GSX/C#)

Я сделал процесс получения сертификата от Apple, и я включил белый IP-адрес нашего сервера, и даже подтвердил, что могу получить доступ к конечной точке службы с нашего сервера, используя простой интерфейс, используя HttpWebRequest, где я легко могу прикрепить сертификат, используя webRequest.ClientCertificates.Add(), поэтому я знаю, что все готово для его работы.

Но моя проблема возникает, когда я загрузить WSDL из https://gsxwsut.apple.com/apidocs/prod/html/WSArtifacts.html?user=asp

Я импортировать WSDL в Visual Studio, и когда я пытаюсь сделать экземпляр класса клиента, только один я нахожу GsxWSEmeaAspPortClient, который, кажется, чтобы быть верным, поскольку он имеет все функции аутентификации и различные инструменты, но у него нет ClientCertificates. У него есть ClientCredentials, у которого есть ClientCertificate, но когда я пытаюсь установить сертификат там, он как таковой никогда не устанавливается.

Я предполагаю, что служебный код передает данные через HttpWebRequest или WebRequest, поэтому, если я просто могу получить код запроса из моего экземпляра класса (GsxWSEmeaAspPortClient), я, возможно, исправлю его, но я не могу похоже, там.

Я рассмотрел этот вопрос: How can I connect with Apple's GSX NewGeneration webservices with WCF?, который предполагает, что это действительно должно быть так просто, но у меня нет GsxWSEmeaAspService, только GsxWSEmeaAspPortClient из поколения Visual Studio WSDL.

Если у кого-то есть идеи, которые могут указать мне в любом направлении к победе, я был бы всегда благодарен.

Я использую Visual Studio 2013, и решение является .Net v4.5.1, если это имеет значение.

ответ

0

Я вставил новый код здесь:

public void Authenticate() { 
    // Use custom binding with certificate authentication 
    BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
    // Create service endpoint 
    // Use proper endpoint address - eg. gsxapi.apple.com for production 
    EndpointAddress endpoint = new EndpointAddress("https://gsxapiit.apple.com/gsx-ws/services/emea/asp"); 
    // Create new service 
    Apple.GsxWSEmeaAspPortClient service = new Apple.GsxWSEmeaAspPortClient(binding, endpoint); 
    // Set loaded certificate 
    service.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(
     "[PathToContainerFromStep7].p12", 
     "[YourPasswordFromStep8]"); 
    // Create authenticate request object 
    Apple.authenticateRequestType auth = new Apple.authenticateRequestType() 
    { 
     languageCode = "en", 
     userId = "[YourAppleServiceAccountNumber]", 
     userTimeZone = "[YourTimeZone]", 
     serviceAccountNo = "[YourSoldToNumber]" 
    }; 
    // Authenticate to Apple GSX 
    Apple.authenticateResponseType session = service.Authenticate(auth); 
    // Assign your new session id object 
    userSessionId = new Apple.gsxUserSessionType() { userSessionId = session.userSessionId }; 
}