gpt4 book ai didi

c# - Protobuf 格式的 ServiceStack

转载 作者:行者123 更新时间:2023-11-30 22:19:15 25 4
gpt4 key购买 nike

我正在尝试在 ServiceStack Web 服务中使用 protobuf 格式(遵循 ServiceStack: REST with ProtoBuf by Steven Hollidge 中的示例。我添加了一个 Winform 应用程序来使用 Web 服务。代码如下。

HelloService.cs

using System.Runtime.Serialization;
using ProtoBuf;
using ServiceStack.Demo.Rest;
using ServiceStack.ServiceHost;
using ServiceStack.ServiceInterface;

namespace ServiceStack.Demo.WebService
{
[DataContract]
public class Hello
{
[DataMember(Order = 1)]
public string Name { get; set; }
}
[DataContract]
public class HelloResponse
{
[DataMember(Order = 1)]
public string Result { get; set; }
}

public class HelloService : RestServiceBase<Hello>
{
public override object OnGet(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
}

Global.asax.cs

using System;
using System.Web;
using Funq;
using ServiceStack.Demo.Rest;
using ServiceStack.Demo.WebService;
using ServiceStack.WebHost.Endpoints;

namespace ServiceStack.Demo
{
public class AppHost : AppHostBase
{
public AppHost() : base("ServiceStack makes services easy!", typeof (AppHost).Assembly)
{
ServiceStack.Plugins.ProtoBuf.AppStart.Start();
}

public override void Configure(Container container)
{
Routes
.Add<Hello>("/hello")
.Add<Hello>("/hello/{Name}");

}
}

public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
new AppHost().Init();
}
}
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceStack.ServiceClient;
using ProtoBuf;
using ServiceStack.Plugins.ProtoBuf;
using System.Runtime.Serialization;
using ServiceStack.ServiceClient.Web;

namespace client
{
public partial class Form1 : Form
{
private ServiceClientBase _client;
private const string Url = "http://localhost/servicestack.demo/servicestack/hello?format=x-protobuf";
public Form1()
{
InitializeComponent();
}

private void Button1Click(object sender, EventArgs e)
{

this._client =
new ProtoBufServiceClient(Url);

var response = _client.Send<HelloResponse>(new Hello {Name = "ProtoBuf"});
label1.Text = response.Result;
}


public class Hello
{
public string Name { get; set; }
}


public class HelloResponse
{
public string Result { get; set; }
}
}
}

我得到 System.InvalidOperationException: Type is not expected, no contract can be inferred: client.Form1+Hello

我做错了什么?请建议......

最佳答案

看起来您的 Hello 类和 HelloResponse 类声明了两次。一次在 HelloService.cs 中,一次作为 Form.cs 中的内部类。从您的 Form.cs 文件中删除重复项应该允许您的 ProtoBufServiceClient 引用正确的类/类型。

关于c# - Protobuf 格式的 ServiceStack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com