2012-04-07 236 views
0

我正在使用自托管创建WCF服务。我发现了以下错误,即:WCF服务自托管

目标程序集不包含服务类型。您可能需要调整此程序集的代码访问安全性策略。

的代码如下:

namespace MyJobs 
{ 
    public interface IJobsSvc 
    { 
     [OperationContract] 
     DataSet GetJobs(); 

     [OperationContract] 
     Job GetJobInfo(int JobId); 

     [OperationContract] 
     List<Job> GetAllJobs(); 
    } 
} 

namespace MyJobs 
{ 
    [DataContract] 
    public class Job 
    { 
     [DataMember] 
     public int JobId { get; set;} 

     [DataMember] 
     public string Description{get;set;} 

     [DataMember] 
     public int MinLevel { get; set; } 

     [DataMember] 
     public int MaxLevel { get; set; } 
    } 
} 

namespace MyJobs 
{ 
    public class JobsSvc:IJobsSvc 
    { 
     #region IJobsSvc Members 

     public System.Data.DataSet GetJobs() 
     { 
      string str = @"data source=PERSONAL-659BE4;database=practice;integrated security=true"; 
      DataSet ds = new DataSet(); 
      SqlConnection cn = new SqlConnection(str); 
      SqlDataAdapter da = new SqlDataAdapter("select * from Job1",cn); 
      da.Fill(ds); 
      return ds; 

     } 

     public Job GetJobInfo(int JobId) 
     { 
      string str = @"data source=PERSONAL-659BE4;database=practice;integrated security=true"; 
      SqlConnection cn = new SqlConnection(str); 
      SqlCommand cmd = new SqlCommand("select * from Job1 where JobId="+JobId,cn); 
      cn.Open(); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      Job obj = new Job(); 
      if (dr.Read()) 
      { 
       obj.JobId = JobId; 
       obj.Description = dr[1].ToString(); 
       obj.MinLevel = Convert.ToInt32(dr[2]); 
       obj.MaxLevel = Convert.ToInt32(dr[3]); 
      } 
      else 
      { 
       obj.JobId = -1; 
      } 
      return obj; 
     } 

     public List<Job> GetAllJobs() 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
} 

app.config文件是:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 
    <services> 
     <service name="MyJobs.Job"> 
     <endpoint address="" binding="wsHttpBinding" contract="MyJobs.IJobsSvc"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/Jobs/MyJobs/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 
+0

从你的app.config:'< - 当部署服务库项目,配置文件的内容必须被添加到主机的app.config文件。 System.Configuration不支持库的配置文件。 - >'。看起来你已经创建了一个WCF服务库。如果是这种情况,则需要将WCF配置数据放入使用库的应用程序的App.config文件中,而不是放在库的App.config中。 – Tim 2012-04-07 20:47:53

回答

2

您需要将属性添加[ServiceContract]IJobSvc接口

更新

创建公开元数据的行为。

<serviceBehaviors> 
    <behavior name="SimpleServiceBehavior"> 
     <!-- To avoid disclosing metadata information, 
     set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="True"/> 
     <!-- To receive exception details in faults for debugging purposes, 
     set the value below to true. Set to false before deployment 
     to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 

那么这种行为配置您的服务:

<service name="MyJobs.Job" behaviorConfiguration="SimpleServiceBehavior"> 
    <endpoint address="" binding="wsHttpBinding" contract="MyJobs.IJobsSvc"> 
+0

错误更改为“WCF服务主机找不到任何服务元数据,这可能会导致客户端应用程序运行不正常,请检查元数据是否可用。” – 2012-04-07 12:34:55

+0

@AlokKumar,你可以发布你的wcf配置文件吗? – Tung 2012-04-07 12:47:30

+0

这是我的app.config文件 – 2012-04-07 12:50:08