构建 Service Fabric Web Api 时出现错误无法从 Fabric.StatelessServiceContext 转换为 Fabric.ServiceInitializationPa
Posted
技术标签:
【中文标题】构建 Service Fabric Web Api 时出现错误无法从 Fabric.StatelessServiceContext 转换为 Fabric.ServiceInitializationParameters【英文标题】:Getting error cannot convert from Fabric.StatelessServiceContext to Fabric.ServiceInitializationParameters while building Service Fabric Web Api 【发布时间】:2017-11-03 17:46:15 【问题描述】:following this tutorial 时出现错误
cannot convert from 'System.Fabric.StatelessServiceContext' to 'System.Fabric.ServiceInitializationParameters'
在尝试创建其中解释的 Service Fabric Web Api 时。
具体来说,我在下一行得到它:
return new[]
new ServiceInstanceListener(initParams =>
new OwinCommunicationListener("api",new Startup(),initParams) )
;
我没有尝试太多,因为 Azure 的 Service Fabric 是相当新的东西,所以没有太多其他 Web Api 示例。上面的教程本身甚至还没有完成。
有人有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:所以问题是教程中有错字。
解决方案是OwinCommunicationListener
类中的_parameters
应该声明为StatelessServiceContext
,而不是ServiceInitializationParameters
。该解决方案是由 Visual Studio 的潜在修复建议的。
为了清楚起见,引发错误的教程的原始代码如下:
private readonly IOwinAppBuilder _startup;
private readonly string _appRoot;
private readonly ServiceInitializationParameters _parameters;
private string _listeningAddress;
private IDisposable _serverHandle;
public OwinCommunicationListener(
string appRoot,
IOwinAppBuilder startup,
ServiceInitializationParameters serviceInitializationParameters
)
_startup = startup;
_appRoot = appRoot;
_parameters = serviceInitializationParameters;
正确的代码是下一个,注意第 3 行和第 11 行的区别:
private readonly IOwinAppBuilder _startup;
private readonly string _appRoot;
private readonly StatelessServiceContext _parameters;
private string _listeningAddress;
private IDisposable _serverHandle;
public OwinCommunicationListener(
string appRoot,
IOwinAppBuilder startup,
// Use StatelessServiceContext, NOT ServiceInitializationParameters
StatelessServiceContext serviceInitializationParameters
)
_startup = startup;
_appRoot = appRoot;
_parameters = serviceInitializationParameters;
调用保持不变:
return new[]
new ServiceInstanceListener(initParams =>
new OwinCommunicationListener("api",new Startup(),initParams) )
;
我希望这会有所帮助。
【讨论】:
【参考方案2】:对于相同的教程,如果有人想知道缺少参考,这里是列表:
using System.Fabric;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using System.Globalization;using System.Collections.Generic;
using System.Fabric;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using Microsoft.ServiceFabric.Services.Runtime;
对于已安装的 Nuget 包:(转到项目资源管理器中的引用,右键单击 > Nuget 包资源管理器,如果没有,请安装以下内容)
【讨论】:
以上是关于构建 Service Fabric Web Api 时出现错误无法从 Fabric.StatelessServiceContext 转换为 Fabric.ServiceInitializationPa的主要内容,如果未能解决你的问题,请参考以下文章
具有外部和内部端点的 Service Fabric Web Api
Web API Service Fabric 应用程序提供未经授权的