【问题标题】:Logging information about the client making requests to WCF (WAS) webservice记录有关向 WCF (WAS) Web 服务发出请求的客户端的信息
【发布时间】:2010-01-11 21:17:03
【问题描述】:

我有一个 WCF 网络服务,实际上有许多网络服务,都使用 net.tcp 并通过 WAS 托管在 IIS 中。多个客户端正在调用这些服务,所有这些都是已知的,但无法控制(也就是说,我无法更改他们的代码,因此我也无法更改服务)。其中一些客户端对服务不是很好,并导致很多错误,我想找出哪些是有问题的。我无法查看传递的凭据,因为它们不使用身份验证,我无法使用 ip/port,因为它们都来自同一个地方。我现在的挑战是找到某种方法来区分这些客户端,例如通过查看调用程序集或远程系统上识别客户端的东西。任何人都知道任何此类信息?我可以访问 IIS 日志、事件查看器、跟踪文件和它们本身的服务(我可以在代码中放入任何不中断正常流程的内容)。

【问题讨论】:

    标签: wcf iis logging was


    【解决方案1】:

    查看 WCF 内置的日志记录和跟踪机制:

    当您搜索“WCF、跟踪、日志记录”时,还有更多。 WCF 中内置的支持非常广泛 - 您可以轻松记录消息、查看它们的来源、分析它们 - 您可以根据需要打开或关闭它。

    【讨论】:

    • 这些消息中究竟是什么显示了它们的来源?我尝试跟踪“详细,活动跟踪”,但这并没有透露有关客户端的任何信息,只有调用的方法、响应等。
    【解决方案2】:

    您可以编写一些自定义行为来检查您的服务收到的消息;可以在此处找到示例:Writing a WCF Message InspectorSimple WCF Service Behavior: Inspect Messages Through Debug Output

    【讨论】:

    • 消息对象上似乎没有任何东西可以区分客户端...
    【解决方案3】:

    看来您的问题不在于日志记录机制;这是为了找到一种区分客户的方法。

    如果您无法控制客户端的代码,您至少可以更改他们用于端点的 URL 吗?如果是这样,那么我建议您在多个端点地址公开服务,然后让每个客户端使用唯一的地址。然后该地址将作为客户端的代理。

    【讨论】:

    • 你是绝对正确的。我在客户端上真正控制的唯一事情是 web.config/app.config 并且实际上可能对 url 做一些事情。我想知道我是否可以以某种方式在 url 本身中插入一些不会更改服务地址但仍会传递给服务器的内容...
    • 根据您的想法,我想出了一个解决方案。在服务 url 之后,我在 web/app.config 中添加 ?client=something。这对服务绝对没有任何意义,但它包含在服务跟踪中。简单有效,不需要对实际代码进行任何更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2014-05-12
    相关资源
    最近更新 更多