【问题标题】:async exception occured when silverlight access wcf service hosted in iis 7Silverlight 访问 iis 7 中托管的 wcf 服务时发生异步异常
【发布时间】:2014-10-13 07:53:28
【问题描述】:

伙计们,我在创建 SL 客户端以访问托管在 IIS7 中的 WCF 服务时遇到了一个奇怪的问题。我的服务合同如下所示:

[ServiceContract]
public interface IAuthorizationService
{
    [OperationContract]
    RoleMetadata GetRoleMetadata();

    [OperationContract]
    void CreateNewRole(Guid id, string name, string description);
    [OperationContract]
    void UpdateRole(Guid id, string name, string description);
    [OperationContract]
    void RemoveRole(Guid id);

    [OperationContract]
    void AddPersonsToRole(Guid roleID, IEnumerable<int> pids);
    [OperationContract]
    void RemovePersonsFromRole(Guid roleID, IEnumerable<int> pids);

    [OperationContract]
    void GrantRolePermissions(Guid roleID, Int64 mask);
    [OperationContract]
    void RevokeRolePermissions(Guid roleID, Int64 mask);
}

我说这个问题很奇怪,因为该服务的部分方法可以访问,而其他方法无法访问。条件是,当我尝试访问方法 GetRoleMetadata 时,我收到一个错误,显示发生了异步异常并且结果无效。但是当我调用 CreateNewRole 时,我顺利地在数据库中获得了新记录。

我已经多次检查服务和客户端配置,并在一些不同的实现中重写了服务,但我收获了无用的收获。所以希望有高手能帮我打败它。

还有一点,它在开发环境下完美运行(vs2013,sqlexpress 2008)。在服务器(Windows Server2008 R2 企业版、SQLServer 2008 企业版、IIS7、.net framework 4.0)上实施项目后出现问题。

[2014-10-16] 我用 WCF 通道模式重写了服务和相应的客户端代码。新合同是这样的:

 [ServiceContract]
public interface IAuthority
{
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginGetRoles(AsyncCallback callback, object state);
    RoleMetaData EndGetRoles(IAsyncResult result);
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginUpdateRole(bool addNewRole, Guid id, string name, string description, AsyncCallback callback, object state);
    void EndUpdateRole(IAsyncResult result);
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginRemoveRole(Guid id, AsyncCallback callback, object state);
    void EndRemoveRole(IAsyncResult result);
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginAlterRoleMembers(Guid roleID, bool addMembers, IEnumerable<int> pids, AsyncCallback callback, object state);
    void EndAlterRoleMembers(IAsyncResult result);
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginAlterRolePermissions(Guid roleID, bool grantPermissions, Int64 mask, AsyncCallback callback, object state);
    void EndAlterRolePermissions(IAsyncResult result);
}

然后在客户端我使用 ChannelFactory 和 Channel 访问服务。但是,问题仍然存在。我可以访问除 GetRoles 之外的所有方法。这次我收到一条新的错误消息:“[HttpWebRequest_WebException_RemoteServer] NotFound”。我的心都碎了。下一步,我将重写整个 UI 和服务代理,即一个全新的客户端来测试这个问题。上帝保佑我。

[2014-10-16 23:32 成都] 我写了一个新的简单客户端来访问服务。问题仍然存在。然而,这清楚地表明服务器上的某些东西是错误的。明天我必须仔细检查服务器端的东西。 IIS 配置是第一嫌疑人?但是还有 5 个服务与这个不幸的授权服务共享相同的配置并按预期运行。

WCF 跟踪也没有向我表示应有的尊重!我在 web.config 中配置了跟踪,如下所示,只是得到了一个空文件。

<system.diagnostics>
        <sources>
            <source name="System.ServiceModel"  switchValue="Information, ActivityTracing"    propagateActivity="true" >
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
            <source name="System.ServiceModel.MessageLogging">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\trace.xml"/>
        </sharedListeners>
    </system.diagnostics>
<system.serviceModel>
        <diagnostics>
            <messageLogging logEntireMessage="true"
                                        logMalformedMessages="true"
                                        logMessagesAtServiceLevel="true"
                                        logMessagesAtTransportLevel="true"
                                        maxMessagesToLog="500"/>
        </diagnostics>
<!--...-->
</system.serviceModel>

大师们,请给我一个顿悟,救救我!

【问题讨论】:

    标签: wcf silverlight asynchronous invalidation


    【解决方案1】:

    哦,是的!我修好了它!我得到了一个很大的教训,应该总结一下。我的步骤:

    1.仔细阅读有关WCF跟踪的规范。(http://www.codeproject.com/Articles/36031/WCF-Tracing-FAQs,MSDN中也有关于详细配置跟踪的文章,很容易找到)并且我认为最好的做法是使用Service Configure Editing Tool来配置跟踪手动编辑,避免配置错误导致追踪失败。

    2. 正确配置 wcf 跟踪后,我在服务跟踪日志查看器中看到带有红色前景的活动错误日志。检查后我很快找到了错误并纠正了它。

    3.我的例外来自数据访问层(DAL)。一位同事无意中修改了存储过程 - 只是交换了相同数据类型的两列的位置。他不知道,也没有通知我。这只发生在实现服务器上,而不是在开发环境中。所以我没有通过实现服务器数据库生成新的 DAL 类。所以我的服务总是出现逻辑错误。这表明实体框架可能是一个很好的选择,可以避免类似的问题。

    4.另一个内部教训是,我们对这个项目的特设团队的管理过于松散。这么大的沟通问题,合作在某种程度上算是失败了。

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多