我正在尝试在我的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。
我做错了吗?
我应该了解哪些服务有限制?
有没有我能看到错误的日志?
感谢您的回答。
答案 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。