我在WCF服务调用堆栈中的操作被调用,但没有完成

时间:2011-05-24 18:43:27

标签: silverlight wcf

我支持Silverlight 4.0应用程序,该应用程序调用WCF服务。当我调试服务,在IIS本地托管时,它使它成为这个方法,但显然离开方法而不从最终返回。我没有看到任何异常被调用。

这是业务类中的方法,它不会返回到调用方法。

public string ExecuteMyPortalNonQuery(string CommandConfig, params object[] commandParams)
    {
        MyCompany.MyPortal.DataAccess.SQLDataAccess objSQLDatAcces = new SQLDataAccess();
        objSQLDatAcces.connection = ConfigurationSettings.AppSettings["MyPortalSQLConnection"];

        string SqlQueryString = ConfigurationSettings.AppSettings[CommandConfig];
        if (commandParams != null && commandParams.Length > 0)
            SqlQueryString = string.Format(SqlQueryString, commandParams);
        objSQLDatAcces.executeNonQuery(SqlQueryString);
        return ("SUCCESS");
    }

修改

这是由操作合同

调用的
[OperationContract]
public string UpdateBlahblahList(int Id, int HierarchyId, int PagetypeId, string Name, string Asset, Boolean Default, string ServerName = "", string ServerConnectionString = "")
        {
            MyCompany.MyPortal.DataAccess.SAPAccess sp = new SAPAccess();
            if (Id != 0)
                return (sp.ExecuteMyPortalNonQuery("UpdateBlahblahList", Id, Name, Asset, (Default == true) ? 1 : 0, ServerName, ServerConnectionString));
            else
                return (sp.ExecuteMyPortalNonQuery("InsertBlahblahList", HierarchyId, PagetypeId, Name, Asset, (Default == true) ? 1 : 0, ServerName, ServerConnectionString));
        }

也就是说,在调试时,在踩到字符串格式化行SqlQueryString = string.Format(SqlQueryString, commandParams);

后,我发现自己在UpdateBlahblahCompleted方法的调用客户端中

永远不会到达objSQLDatAcces.executeNonQuery(SqlQueryString);行和return ("SUCCESS");行。

总结一下:

  1. 客户端调用UpdateBlahblahListAsync
  2. 在服务中,[OperationContract] UpdateBlahblahList已到达
  3. 服务方法UpdateBlahblahList调用ExecuteMyPortalNonQuery但未完成
  4. 客户使用client_UpdateBlahblahListCompleted |
  5. 重新进入

    实际效果是数据库无法更新。

    调试导致这个吗?我正在调试两个VS 2010实例。

    是否可以抛出我未观察到的异常?

    修改

    感谢西蒙,我知道在哪里观察异常。在客户端的Async完成方法中,Args是最内层的异常消息:“远程服务器返回错误:NotFound。”。

    以下是两个参数的值: 更新[dbo]。[BlahblahXref] SET [PageId] ='{1}',[名称] ='{2}',[资产] ='{3}',[默认] ='{4}',[ ServerName] ='{5}',[ServerConnectionString] ='{6}'WHERE Id = {0}

    commandParams [] = {375,“Test”,“111”,0,“someServerName”,“some long connection string”}

1 个答案:

答案 0 :(得分:0)

在托管应用程序的配置文件(Web或控制台,无论如何)中,您可以添加以下行来启用跟踪日志记录:

    <system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
            <listeners>
                <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Services.svclog"  />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

然后再次重现您的错误,打开“Services.svclog”,您将能够看到wcf调用的详细信息,包括异常详细信息。