WCF服务自托管

时间:2012-04-07 12:17:39

标签: 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>

1 个答案:

答案 0 :(得分: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">