在我的 API 中,我必須包裝一個 WCF 服務,我添加了對專案的參考,并將它添加到 IServiceCollection
services.AddScoped<IServiceClient, ServiceClient>(sp =>
new ServiceClient($"{configuration.GetValue<string>(Constant.Url)}"));
我的 ServiceClient 類:
public class ServiceClient: IServiceClient
{
private string urlService;
// WCF Service to wrapp
private WCFServiceReference.WCFServiceServiceClient _WCFServiceServiceClient;
public ServiceClient(string urlService)
{
this.urlService = urlService;
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
this._WCFServiceServiceClient = new WCFServiceReference.WCFServiceServiceClient(basicHttpBinding, new EndpointAddress(this.urlService));
}
public Task<CalculateResponse> CalculateAsync(Request input)
{
return CalculateAsync(input, CancellationToken.None);
}
public Task<GetProductListResponse> GetProductListAsync(ProductRequest input)
{
return GetElencoProdottiAsync(input, CancellationToken.None);
}
public Task<GetVariableOfProductResponse> GetVariableOfProductAsync(GetVariableRequest input)
{
return GetVariableOfProductAsync(input, CancellationToken.None);
}
private Task<GetProductListResponse> GetProductListAsync(ProductRequest input, CancellationToken none
{
return this._WCFServiceServiceClient.GetProductListAsync(input);
}
private Task<GetVariableOfProductResponse> GetVariableOfProductAsync(GetVariableRequest input, CancellationToken none)
{
return this._WCFServiceServiceClient.GetVariableOfProductAsync(input);
}
private Task<CalculateResponse> CalculateAsync(Request input, CancellationToken none)
{
return this._WCFServiceServiceClient.CalculateAsync(input);
}
}
當我啟動我的應用程式時,CreateHostBuilder(args).Build().Run();
Main 中的這個呼叫會引發以下例外:
某些服務無法構建(驗證服務描述符“ServiceType:Namespace.IProductService Lifetime:Scoped ImplementationType:Namespace.ProductService”時出錯:嘗試激活“Namespace.ProductService”時無法決議“Namespace.ServiceClient”型別的服務'。)
uj5u.com熱心網友回復:
您的ProductService服務生命周期是多少?
單例無法決議 Scope 服務
uj5u.com熱心網友回復:
也許你可以試試這個,你可以看看這篇文章的細節。
public class ServiceClient : IServiceClient
{
...
public ServiceClient(IServiceClient ServiceClient)
{
...
}
}
uj5u.com熱心網友回復:
我關注這篇文章所以我修改了我的包裝器:
public class ServiceClient : ClientBase<WCFServiceReference.IWCFServiceServiceClient>, WCFServiceReference.IWCFServiceServiceClient, IServiceClient
{
private string urlService;
private WCFServiceReference.WCFServiceServiceClient _WCFServiceServiceClient; //WCF Service to wrapp
public ServiceClient(IOptions<ServiceClientOptions> options) : base()
{
if (options == null)
{
throw new ArgumentNullException(nameof(options));
}
this.Endpoint.Address = new EndpointAddress(options.Value.BaseUrl);
}
public Task<CalculateResponse> CalculateAsync(Request input)
{
return CalculateAsync(input, CancellationToken.None);
}
public Task<GetProductListResponse> GetProductListAsync(ProductRequest input)
{
return GetElencoProdottiAsync(input, CancellationToken.None);
}
public Task<GetVariableOfProductResponse> GetVariableOfProductAsync(GetVariableRequest input)
{
return GetVariableOfProductAsync(input, CancellationToken.None);
}
private Task<GetProductListResponse> GetProductListAsync(ProductRequest input, CancellationToken none)
{
return this.Channel.GetProductListAsync(input);
}
private Task<GetVariableOfProductResponse> GetVariableOfProductAsync(GetVariableRequest input, CancellationToken none)
{
return this.Channel.GetVariableOfProductAsync(input);
}
private Task<CalculateResponse> CalculateAsync(Request input, CancellationToken none)
{
return this.Channel.CalculateAsync(input);
}
}
而這個配置:
services.AddScoped<IServiceClient>(provider => {
var options = new ServiceClientOptions
{
BaseUrl = configuration.GetValue<string>(ApplicationConstant.UrlWCFExample)
};
var client = new ServiceClient((Microsoft.Extensions.Options.IOptions<QuickServiceClientOptions>)options);
return client;
});
但我得到同樣的錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/428117.html
上一篇:InvalidDefinitionException在Java中找不到泛型類的序列化程式
下一篇:更改影像樣式和標題
