Ban*_*hee 10 .net c# wcf endpoint
使用ServiceHost.AddServiceEndpoint添加自定义ProtoEndpointBehavior时,我收到以下异常:
System.ArgumentNullException:值不能为null.参数名称:System.Collections.Generic.Dictionary上的键
2.FindEntry(TKey key) at System.Collections.Generic.Dictionary2.ContainsKey(TKey键)位于System.ServiceModel.ServiceHostBase.ImplementedContractsContractResolver.ResolveContract(String contractName),位于System的System.ServiceModel.ServiceHostBase.ServiceAndBehaviorsContractResolver.ResolveContract(String contractName).位于My.Service.Business的System.ServiceModel.ServiceHostBase.AddServiceEndpoint(ServiceEndpoint端点)的System.ServiceModel.Description.ConfigLoader.LookupContract(String contractName,String serviceName)中的ServiceModel.Description.ConfigLoader.LookupContractForStandardEndpoint(String contractName,String serviceName). C:\ My\Produkter\My Utveckling\Solution\My.Service.Business\ServiceHandler.cs中的ServiceHandler.StartService(类型serviceType,String uri,SecureConnectionSettings secureConnectionSettings):第150行
这是代码的样子:
ServiceHost serviceHost = null;
Console.WriteLine("Creating service " + serviceType.FullName);
serviceHost = new MyServiceHost(serviceType, new Uri(uri));
var endPointAddress = "";
HttpBindingBase binding = null;
if (secureConnectionSettings != null && secureConnectionSettings.Enabled)
{
Console.WriteLine("Setting certificates");
X509Store store = new X509Store(secureConnectionSettings.CertificateStore, secureConnectionSettings.CertificateLocation);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, secureConnectionSettings.Thumbprint, true);
store.Close();
if (certs.Count > 0)
serviceHost.Credentials.ServiceCertificate.SetCertificate(secureConnectionSettings.CertificateLocation,
secureConnectionSettings.CertificateStore,
X509FindType.FindByThumbprint,
secureConnectionSettings.Thumbprint);
else
throw new Exception("Could not finde certificate with thumbprint " + secureConnectionSettings.Thumbprint);
endPointAddress = uri + "/BinaryHttpsProto";
binding = CreateNetHttpsBinding(secureConnectionSettings);
}
else
{
endPointAddress = uri + "/BinaryHttpProto";
binding = CreateNetHttpBinding();
}
var endpoint = new System.ServiceModel.Description.ServiceEndpoint(new System.ServiceModel.Description.ContractDescription(typeof(IMyClientService).FullName),
binding,
new EndpointAddress(endPointAddress));
endpoint.EndpointBehaviors.Add(new ProtoBuf.ServiceModel.ProtoEndpointBehavior());
serviceHost.AddServiceEndpoint(endpoint);
Console.WriteLine("Starting service...");
serviceHost.Open();
Console.WriteLine("Service started successfully (" + uri + ")");
return serviceHost;
Run Code Online (Sandbox Code Playgroud)
我用这个在配置文件中设置这个:
<endpointBehaviors>
<behavior name="protoEndpointBehavior">
<protobuf />
</behavior>
</endpointBehaviors>
Run Code Online (Sandbox Code Playgroud)
现在我需要在代码中添加它.
怎么了?
这是一个已知的错误,它有解决方法.
获取ContractDescription的实例时,请使用静态方法ContractDescription.GetContract(Type)而不是直接的ContractDescription()构造函数:
var endpoint = new System.ServiceModel.Description.ServiceEndpoint(System.ServiceModel.Description.ContractDescription.GetContract(typeof(IMyClientService)),
binding,
new EndpointAddress(endPointAddress));
Run Code Online (Sandbox Code Playgroud)
我能够重现你的问题,这个解决方法对我有用.
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |