正在获取System.NullReferenceException:'对象引用未设置为对象的实例.致电服务时 [英] getting System.NullReferenceException: 'Object reference not set to an instance of an object.' when calling a service
本文介绍了正在获取System.NullReferenceException:'对象引用未设置为对象的实例.致电服务时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用.net core,并使用了WCF服务.当我在标头中传递Api键并调用服务时,它将引发NullReferenceException错误.
I am using .net core and consumed a WCF service. When I pass Api key in header and call a service , it throws NullReferenceException error.
下面是我用来调用服务的函数
Below is the function I am using to call a service
public async void CallService(string reqdata, string partner)
{
BasicHttpBinding basicHttpBinding = null;
EndpointAddress endpointAddress = null;
ChannelFactory<IRequestChannel> factory = null;
QuoteEngineService.MarketingSoftwareClient service = new QuoteEngineService.MarketingSoftwareClient();
try
{
basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
endpointAddress = new EndpointAddress(new Uri("https://Service-engine-dev.110apps.net/Package/TempSoftware.svc?wsdl"));
factory = new ChannelFactory<IRequestChannel>(basicHttpBinding, endpointAddress);
IRequestChannel channel = factory.CreateChannel();
HttpRequestMessageProperty httpRequestMessage = new HttpRequestMessageProperty();
string apikey = "OAvHGAAatytiZno";
httpRequestMessage.Headers.Add("apikey", apikey);
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestMessage;
service.OpenAsync();
var result2 = await service.PRequestAsync(reqedata, partner);
var data = result2;
}
catch(Exception e)
{
throw;
}
finally
{
if (service.State==System.ServiceModel.CommunicationState.Opened)
{
service.CloseAsync();
}
}
}
}
我在遇到错误
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestMessage;
推荐答案
如果直接创建服务类型的实例,然后在其上调用方法,则没有OperationContext.下面的示例演示如何使用OperationContextScope在客户端应用程序中创建新上下文:
If you directly create an instance of the service type and then you call a method on it, there is no OperationContext.The following example shows how to use the OperationContextScope to create a new context in a client application:
public class Client {
public void run()
{
ServiceReference1.Service1Client service1Client = new Service1Client(new InstanceContext(this));
using (OperationContextScope scope = new OperationContextScope(service1Client.InnerChannel)) {
HttpRequestMessageProperty http = new HttpRequestMessageProperty();
string apikey = "OAvHGAAatytiZno";
http.Headers.Add("apikey", apikey);
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = http;
ServiceReference1.Result result = service1Client.GetUserData("Test");
}
}
}
class Program
{
static void Main(string[] args)
{
Client client = new Client();
client.run();
}
}
这是参考链接: