2012-02-10 2 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

이 코드는 컴파일되지 않습니다. 메서드 외부에 명령문을 사용할 수 없습니다. 마지막 두 줄 (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(); 

} 

서비스까지 단지 새로운 WCF 서비스 템플릿 서비스를 만드는 것입니다 VS2010에서 실행 얻을 이보다 쉽게 ​​솔루션입니다. 데모 코드를 가져 와서 servicecontract 인터페이스와 구현 서비스에 대한 코드를 입력 한 다음 디버그 -> 실행을 선택하면 VS2010이 서비스를 실행하기 위해 외부 앱을 만들지 않고도 서비스를 호스팅합니다. 또한 간단한 winforms 앱에서 wcf 함수의 코드와 반환 값을 테스트하기 위해 데이터를 서비스로 보낼 수 있습니다.

+0

WCF를 정리해 주셔서 감사합니다. 그러나 .svc.cs 파일의 클래스에서 ServiceHosts에 계속 액세스 할 수 있습니까? – jmnwong

+0

내 지식과 iis에서 WCF 서비스를 호스팅하는 경우, 당신은 svc.cs에만 iis에 대한 어떤 서비스 이름에 대한 정보를 호스트하고 싶습니다. 그게 당신이 svc.cs 파일을 언급 할 때 얻는 것입니다. –

+0

서비스 및 wcf의 전체 개념은이를 사용하는 코드/클라이언트 외부의 서비스를 호스팅하는 것입니다. 그것이 바로 SOA의 요점입니다. 작업은 애플리케이션을 소비하고자하는 외부의 어딘가에서 이루어집니다. 따라서 사용하려는 앱 이외의 다른 서비스에서 서비스를 호스팅해야합니다. –

관련 문제