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。
我做错什么了吗?
我应该了解的服务是否有一些限制?
有什么日志可以让我看到哪里出了问题吗?
谢谢你的回答。
有什么日志可以让我看到哪里出了问题吗?
您可以在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。