Web services 如何将X509Certificate2附加到Web服务(特定于Apple GSX/C)

Web services 如何将X509Certificate2附加到Web服务(特定于Apple GSX/C),web-services,wsdl,x509,x509certificate2,Web Services,Wsdl,X509,X509certificate2,苹果公司于今年(2015年)8月15日发布了新一代WSDL,最大的变化是对WSDL的每次调用都必须使用证书文件进行验证 我已经完成了从苹果获得证书的过程,我已经将我们的服务器IP列入了白名单,我甚至还验证了我可以通过使用HttpWebRequest编写一个简单的接口从服务器访问服务端点,在这个接口中,我可以使用webRequest.ClientCertificates.Add()轻松地附加证书,所以我知道一切都准备好了 但是,当我从下载WSDL时,我的问题就出现了 我将WSDL导入到Visual

苹果公司于今年(2015年)8月15日发布了新一代WSDL,最大的变化是对WSDL的每次调用都必须使用证书文件进行验证

我已经完成了从苹果获得证书的过程,我已经将我们的服务器IP列入了白名单,我甚至还验证了我可以通过使用HttpWebRequest编写一个简单的接口从服务器访问服务端点,在这个接口中,我可以使用webRequest.ClientCertificates.Add()轻松地附加证书,所以我知道一切都准备好了

但是,当我从下载WSDL时,我的问题就出现了

我将WSDL导入到Visual Studio中,当我尝试创建客户机类的实例时,我找到的唯一一个实例是GsxWSEmeaAspPortClient,它似乎是正确的,因为它具有用于身份验证的所有函数和各种工具,但它没有ClientCertificates。它确实有ClientCredentials,它有ClientCertificate,但是当我尝试在那里设置证书时,它好像从未设置过

我猜服务代码通过HttpWebRequest或WebRequest传输数据,因此,如果我可以从类的实例(GSXWSeMeaaApportClient)获取请求代码,我可能可以修复它,但我似乎无法到达那里

我已经看了这个问题:这表明它真的应该那么简单,但我没有GSXWSemeAAppService,只有我的VisualStudio生成的WSDL中的GSXWSemeAAppPortClient

如果有人有任何想法可以指引我走向胜利,我将永远感激


我使用的是Visual Studio 2013,解决方案是.Net v4.5.1,如果这有什么不同的话。

我在这里粘贴了新代码:

public void Authenticate(){
//使用带有证书身份验证的自定义绑定
BasicHttpBinding=新的BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType=HttpClientCredentialType.Certificate;
//创建服务端点
//使用适当的端点地址-例如gsxapi.apple.com进行生产
EndpointAddress endpoint=新的EndpointAddress(“https://gsxapiit.apple.com/gsx-ws/services/emea/asp");
//创建新服务
Apple.GsxWSEmeaAspPortClient service=new Apple.GsxWSEmeaAspPortClient(绑定,端点);
//设置加载的证书
service.ClientCredentials.ClientCertificate.Certificate=新的X509Certificate2(
“[PathToContainerFromStep7].p12”,
“[YourPasswordFromStep8]”;
//创建身份验证请求对象
Apple.authenticateRequestType auth=新的Apple.authenticateRequestType()
{
languageCode=“en”,
userId=“[YourAppleServiceAccountNumber]”,
userTimeZone=“[YourTimeZone]”,
serviceAccountNo=“[YourSoldtonMember]”
};
//通过Apple GSX认证
Apple.authenticateResponseType session=service.Authenticate(auth);
//分配新的会话id对象
userSessionId=new Apple.gsxUserSessionType(){userSessionId=session.userSessionId};
}