REST服务返回对象中止

时间:2012-04-03 17:30:21

标签: c# web-services rest

我正在尝试在我的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,它应该返回 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是一个非常复杂的对象。我不确定我是否可以通过服务退回。它是包含其他结构的struct,其中包含另一个结构。

[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 时,我收到Connection Interupted错误。 Firebug在网络选项卡上显示已中止状态。服务以某种方式崩溃。我可以调试它并看到UserLog()重新调整uci对象并且服务返回它,但是在浏览器和服务之间它失败了。

我试图返回completly新对象:

 UserClientInfo uci = new UserClientInfo();

该工作并返回带有普通对象的xml。


我做错了吗?

我应该了解哪些服务有限制?

有没有我能看到错误的日志?

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

  

有没有我能看到错误的日志?

您可以在web.config文件中添加WCF logging。然后,您可以使用S ervice Trace Viewer Tool来读取/监控它。

<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>

答案 1 :(得分:0)

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