【问题标题】:Getting error cannot convert from Fabric.StatelessServiceContext to Fabric.ServiceInitializationParameters while building Service Fabric Web Api构建 Service Fabric Web Api 时出现错误无法从 Fabric.StatelessServiceContext 转换为 Fabric.ServiceInitializationParameters
【发布时间】: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 示例。上面的教程本身甚至还没有完成。

有人有什么想法吗?

谢谢

【问题讨论】:

    标签: c# azure asp.net-web-api asp.net-web-api2 azure-service-fabric


    【解决方案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 包资源管理器,如果没有,请安装以下内容)

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 2018-07-11
        • 1970-01-01
        • 2017-05-20
        • 2016-08-17
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        相关资源
        最近更新 更多