2011-05-24 52 views
2

我支持一个Silverlight 4.0的应用程序,这使得一个WCF服务的调用。当我调试服务,在IIS上本地托管时,它使它成为此方法,但显然使方法不会从最终返回。我没有看到任何异常被调用。我的WCF服务的调用堆栈操作被调用,但没有完成

这是一个商业类,它差一点就返回到调用方法的方法。

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)); 
     } 

也就是说,在调试时,我发现自己在正确的UpdateBlahblahCompleted方法调用客户端跨过后叫字符串格式化线,SqlQueryString = string.Format(SqlQueryString, commandParams);

线条永远不会到达0和return ("SUCCESS");

综上所述:

  1. 客户端调用UpdateBlahblahListAsync
  2. 在达到[OperationContract的] UpdateBlahblahList UpdateBlahblahList调用ExecuteMyPortalNonQuery但没有完成
  3. 客户端与client_UpdateBlahblahListCompleted重新进入
  4. 服务方法的服务|

的净效应是数据库没有更新。

正在调试造成这种情况吗?我与2010年

VS的两个实例调试可以抛出异常,我还没有发现?

编辑

感谢Simon,我知道在哪里可以看到异常。在客户端的异步完成方法中,参数是最内层的异常消息:“远程服务器返回错误:NotFound。”。

这里是两个参数的值: UPDATE [dbo]。[BlahblahXref] SET [PageId] ='{1}',[Name] ='{2}',[Asset] ='{3 }”,[默认] = '{4}',[服务器] = '{5}',[ServerConnectionString] = '{6}' 其中id = {0}

commandParams [] = {375,“测试”,“111”,0,“someServerName”,“一些长期连接字符串”}

+1

client_UpdateBlahblahListCompleted args中是否有错误? – 2011-05-24 18:48:39

+0

这就是我应该看的地方。是。 ** System.Reflection.TargetInvocationException **和内部异常** ** System.Net.WebException:远程服务器返回一个错误:NotFound。 at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse ** – Blanthor 2011-05-24 18:59:15

+1

在服务器上发生了一些异常,您在客户端看到的主要是它的后果。尝试在服务器端启用跟踪 - http://msdn.microsoft.com/en-us/library/ms733025.aspx - 和/或使用网络跟踪工具(如Fiddler)查看服务器对客户端的响应。有了这些信息,我们可以帮助您更多。 – carlosfigueira 2011-05-24 19:26:16

回答

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调用的详细信息,包括异常详细信息。