2010-04-04 42 views
0

我有一個包含WCF服務的WPF應用程序。當我定義雙工合同時引發Xaml解析異常

的XAML代碼非常簡單:

<Window x:Class="WpfApplication1.Window1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="Server" Height="308" Width="560" > 
<Grid> 
     <Grid Margin="2,2,0,0" Name="grid1"> 
      <RichTextBox Margin="14,29,12,39" Name="richTextBox1" /> 
      <TextBox Height="24" Margin="16,0,80,9" Name="textBox1" VerticalAlignment="Bottom">Enter your text here</TextBox> 
      <Button Height="24" HorizontalAlignment="Right" Margin="0,0,12,9" Name="button1" VerticalAlignment="Bottom" Width="63">Send</Button> 
      <Label Height="23" Margin="16,0,12,0" Name="label1" VerticalAlignment="Top">Address:</Label> 
     </Grid> 
</Grid> 
</Window> 

這裏的服務:

命名空間WpfApplication1 {

[ServiceContract(CallbackContract=typeof(IMyCallbackContract))] 
public interface IMyService 
{ 
    [OperationContract(IsOneWay = true)] 
    void NewMessageToServer(string msg); 

    [OperationContract(IsOneWay = true)] 
    bool ServerIsResponsible(); 

} 



[ServiceContract] 
public interface IMyCallbackContract 
{ 
    [OperationContract] 
    void NewMessageToClient(string msg); 

    [OperationContract] 
    void ClientIsResponsible(); 

} 


/// <summary> 
/// Interaction logic for Window1.xaml 
/// </summary> 


     public partial class Window1 : Window 
    { 


      public Window1() 
     { 


     InitializeComponent(); 

     ServiceMetadataBehavior behavior = new 
     ServiceMetadataBehavior(); 
     //behavior.HttpGetEnabled = true; 

     //behavior. 
     ServiceHost serviceHost = new 
     ServiceHost(
     typeof(MyService), 
     new Uri("net.tcp://localhost:8080/")); 

     serviceHost.Description.Behaviors.Add(behavior); 

     serviceHost.AddServiceEndpoint(
      typeof(IMetadataExchange), 
      MetadataExchangeBindings.CreateMexTcpBinding(), 
      "mex"); 

     serviceHost.AddServiceEndpoint(
      typeof(IMyService), 
      new NetTcpBinding(), 
      "ServiceEndpoint"); 

      serviceHost.Open(); 
      MessageBox.Show(
       "server is up"); 

     // label1.Content = label1.Content + String.Format(" net.tcp://localhost:8080/"); 
     } 

     } 

     public class MyService : IMyService 
     { 
      public void NewMessageToServer(string msg) 
      { 

      } 

      public bool ServerIsResponsible() 
      { 
       return true; 
      } 

     } 

}

我得到一個XAML分析異常在第1行中,可能是什麼問題? 謝謝!

回答

3

您的Window1構造函數拋出異常。令人困惑的是,WPF將這些異常封裝在XamlParseException中,即使它們與XAML無關。

要找出到底是怎麼回事:異常的

  1. 休息和調出異常助手。
  2. 打開詳細信息。
  3. 看看InnerException。這將是一個TargetInvocationException。
  4. 展開InnerException並查看 InnerException。
  5. 這個「內部內部異常」是在構造函數中拋出的異常。查看異常的類型和消息,並從那裏開始。

I wrote a few tips on debugging XamlParseExceptions here.

+0

剛剛重疊我的答案。如果這有幫助,這應該被視爲答案。 – Sascha 2010-04-04 21:04:29

+0

您在XamlParseExceptions上編寫的優秀文章。 – 2010-04-04 21:57:02

+0

非常感謝,真的很有幫助! – Yaroslav 2010-04-05 05:02:59

0

,我常常一個XAML解析異常時的東西在構造,甚至程序啓動失敗。儘管XAML是正確的,但運行時不能構造所有必要的對象來啓動XAML並引發此錯誤。

查看異常:任何可能顯示另一個錯誤的內部異常?

如果這沒有幫助,一步一步調試。但沒有任何進一步的幫助,這很難解決。

-sa