REST服务返回对象中止

本文关键字:对象 返回 服务 REST | 更新日期: 2023-09-27 18:29:48

我正在尝试在我的C#应用程序中实现REST服务,以便与Android客户端通信。我很难理解C#部分。

我关注这篇文章:http://msdn.microsoft.com/en-us/library/bb412178

这就是我运行服务的方式:

WebServiceHost host = new WebServiceHost(typeof(RestService), new Uri("http://localhost:8000/"));
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IRestService), new WebHttpBinding(), "");
host.Open();

非常像上面链接的文章中,我有IRestService接口和RestService,方法EchoWithGet(字符串s)EchoWithPost,我不使用它们,我也不会更多地谈论它。我想返回UserClientInfo类,这是我稍后将描述的问题的原因。

[ServiceContract]
interface IRestService
{
    [OperationContract]
    [WebGet]
    UserClientInfo EchoWithGet(string s);
}

这是EchoWithGet(…)的实现。它连接到另一个服务并调用UserLog,UserLog应返回UserClientInfo

public UserClientInfo EchoWithGet(string s)
{
    service = (IService)Activator.GetObject(typeof(IService), "tcp://127.0.0.1:7878/" + "Service");
    service.UserLog("username", "password", out uci);
    return uci;
}

UserClientInfo是一个相当复杂的对象。我不确定是否可以通过服务退货。它是包含另一个结构的结构,其中包含另一种结构。

[Serializable]
public struct UserClientInfo
{
    public ulong ClientId;
    public DatabaseManager DBManager;
    public string DisplayedName;
    public ChISDispositions Dispositions;
    public RegistrationInfo RegistrationInfo;
    public uint Right1;
    public uint Right2;
    public uint Right3;
    public uint Right4;
    public string SessionId;
    public string UserId;
}

当我运行服务并将浏览器指向时http://localhost:8000/EchoWithGet?s=teststring我收到连接中断错误。Firebug在"网络"选项卡上显示"中止"状态。服务以某种方式崩溃。我可以调试它,并看到UserLog()很好地返回了uci对象,服务也返回了它,但在浏览器和服务之间的某个地方它失败了。

我试图返回全新的对象:

 UserClientInfo uci = new UserClientInfo();

这是有效的,并返回带有普通对象的xml。


我做错什么了吗?

我应该了解的服务是否有一些限制?

有什么日志可以让我看到哪里出了问题吗?

谢谢你的回答。

REST服务返回对象中止

有什么日志可以让我看到哪里出了问题吗?

您可以在web.config文件中添加WCF日志记录。然后,您可以使用服务跟踪查看器工具来读取/监视它

<system.diagnostics>
<trace autoflush="true" />
<sources>
        <source name="System.ServiceModel" 
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
        <listeners>
           <add name="sdt" 
               type="System.Diagnostics.XmlWriterTraceListener" 
               initializeData= "SdrConfigExample.e2e" />
        </listeners>
     </source>
</sources>
</system.diagnostics>

问题出在复杂对象的某些部分。解决方案是将其转换为DTO。