2012-02-10 17 views
1

作成したWCFサービスを使用するSilverlightプロジェクトがあります。私の問題は、WCFサービスではServiceHostを作成しましたが、VS2010はオブジェクトのインスタンスを認識していないようです(svHostに下線を引いています)。以下は私のサービスのコードです。ServiceHostメソッドにアクセスできない

using System; 
using System.Collection.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.ServiceModel.Activation; 

namespace userIO.Web 
{ 
    [ServiceContract] 
    public class CoordsService 
    { 
     [OperationContract] 
     public double xDir(); 
     [OperationContract] 
     public double yDir(); 
     [OperationContract] 
     public String keyPressed(); 

     public class Coords : CoordsService 
     { 
      public double xDir { get; set; } 
      public double yDir { get; set; } 
      public String keyPressed { get; set; } 
     } 

     ServiceHost svHost = new ServiceHost(typeof(Coords), new Uri("http://localhost:8080")); 
     BasicHttpBinding binding = new BasicHttpBinding(); 
     svHost.AddServiceEndpoint(typeof(CoordsService), binding, ""); 
     svHost.Open(); 
    } 
} 
+0

このコードはコンパイルされません。メソッドの外にステートメントを置くことはできません。最後の2行(AddServiceEndpointとOpen)はビルドエラーを表示するはずです。正しいコードを投稿できますか? – carlosfigueira

+0

私はそれをコンパイルできなかったので、私はSOに投稿しました。特定の行を修正する方法がわかりませんでした。 – jmnwong

+0

SLとVSを使用している場合は、新しい "Silverlight対応WCFサービス"を追加する必要があります。それはSLによって消費されるサービスのための定型文を持つでしょう。 – carlosfigueira

答えて

2

あなたのServiceContractは、インタフェース(契約)を飾る必要があります。 ServiceHostは、このインターフェイスのインスタンスをホストし、ホストしているのと同じサービスの外にいる必要があります。少なくとも私はそれがこのように行われているのを見ただけです。

基本的な構造は次のとおりです。

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    void DoSomething(Data data); 
} 

[DataContract] 
public class Data 
{ 
    [DataMember] 
    int Num {get;set;} 
} 

public class Service : IService 
{ 
    public void DoSomething(Data data) 
    { // do something } 
} 

// run in any other kind of app, console, win service, winform/wpf 
static void Main() 
{ 
     ServiceHost svHost = new ServiceHost(typeof(Service), new Uri("http://localhost:8080")); 
     BasicHttpBinding binding = new BasicHttpBinding(); 
     svHost.AddServiceEndpoint(binding, ""); 
     svHost.Open(); 

} 

さらに簡単ソリューションVS2010で稼働してあなたのサービスを取得するにはちょうど新しいWCFサービステンプレートでサービスを作成することです。デモコードを取り出し、servicecontractインターフェースと実装サービス用の独自のコードを入力してから、debug - > runを選択すると、サービスを実行する外部アプリを作成せずにVS2010がサービスをホストします。また、単純なwinformsアプリケーションでコードとwcf関数の戻り値をテストするために、サービスにデータを送信することもできます。

+0

WCFをクリアしてくれてありがとう。しかし、.svc.csファイルのクラスからServiceHostにアクセスすることはできますか? – jmnwong

+0

私の知るところでは、iisでWCFサービスをホストする場合は、iisのホスト名を指定するための情報だけをsvc.csに入れたいとします。それがあなたがsvc.csファイルに言及したときに得ているものです。 –

+0

サービスとwcfという概念はすべて、コード/クライアントの外部のどこかでサービスをホストすることです。これがSOAの要点であり、作業はアプリケーションの外部のどこかで行われます。だからあなたはそれを消費するために使用したいアプリケーション以外のサービスであなたのサービスをホストする必要があります。 –

関連する問題