如何在托管解决方案中调试WCF服务?

时间:2011-07-26 00:57:04

标签: c# wcf .net-3.5 hosted

我创建了一个相当简单的Web服务,它有一个方法:UploadFile。显然,它适用于我的机器©。但是,一旦我上传它,方法返回状态202(已接受)。但是,文件永远不会到达那里,并且没有我能看到的错误。我几乎每秒都会添加日志记录,就像代码一样,但它似乎并不像实际执行的那样。

如何调试类似的内容?

这是我的服务器端代码供参考:

[ServiceContract]
interface IUploaderService
{
    [OperationContract(IsOneWay = true)]
    [WebInvoke(Method = "POST", UriTemplate = "/UploadFile?fileName={fileName}")]
    void UploadFile(string fileName, Stream fileContents);
}


[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class UploaderService : IUploaderService //ServiceHostFactory
{
    public void UploadFile(string fileName, Stream fileContents)
    {
        Log.Add("In UploadFile");
    }
}

2 个答案:

答案 0 :(得分:2)

你有一个有趣的问题,我玩了它并在http://blogs.msdn.com/b/carlosfigueira/archive/2011/08/02/wcf-extensibility-system-diagnostic-tracing.aspx的帖子中写了一个解决方案。

基本上,您不是跟踪文件(这是执行跟踪的常用方法),而是添加一个自定义跟踪侦听器,它将从您的应用程序中收集跟踪。您可以在帖子中链接的代码示例中使用GoDaddy(MySql,SqlServer,EasyDB)等提供的数据库之一,将跟踪存储在内存中,并通过另一个WCF服务公开它们。

答案 1 :(得分:0)

尝试以下

[ServiceContract]
interface IUploaderService
{
    [OperationContract(IsOneWay = true)]
    [WebInvoke(Method = "POST", UriTemplate = "/UploadFile?fileName={fileName}")]
    [WebContentType("application/octet-stream")]
    void UploadFile(string fileName, Stream fileContents);
}

如果它不起作用,我也会尝试

[OperationContract]

这样一来,如果在服务上发生某些事情,您将在客户端获得反馈。