1

Windows サービスに WCF 実装クラスが表示されるようになりました。したがって、サービスを開始すると、「ServiceHost はクラス サービス タイプのみをサポートしています」というエラーが表示されます。これが私のコードです:

        try
        {

            Console.WriteLine("Testing 1");
            WCFEmailEventLog.WriteEntry("My service started"); 
            System.Diagnostics.Debugger.Break();
            // Create a ServiceHost 
            // provide the base address.
            serviceHost = new ServiceHost(typeof(TestBulkEmailService.BulkEmailService), new Uri("http://localhost/TestBulkEmailService/TestBulkEmailService.svc") );

            WCFEmailEventLog.WriteEntry("After Service host "); 
            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            serviceHost.Open();

上記のコードでは、typeOf(TestBulkEmailService.BulkEmailService) は実装クラス BulkEmailService を表示せず、WCF コントラクト IBulkEmailService のみを表示します。

私は何を間違っていますか?

ここに私のapp.configファイルがあります:

        <services>
    <service name="WW.Common.Service.Impl.BulkEmailService" behaviorConfiguration="BulkEmailService">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost/TestBulkEmailService/TestBulkEmailService.svc"/>
        </baseAddresses>
      </host>
      <endpoint address="BulkEmailService" binding="basicHttpBinding" contract="TestBulkEmailService.IBulkEmailService" />
      <endpoint address="mex" binding="basicHttpBinding" name="mexEndpoint" contract="IMetadataExchange" />
    </service>
  </services>
<behaviors>
  <serviceBehaviors>
    <behavior name="BulkEmailService">
      <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
      <serviceMetadata httpGetEnabled="true" />
      <serviceSecurityAudit auditLogLocation="Application"
         suppressAuditFailure="true"
         serviceAuthorizationAuditLevel="Success"
         messageAuthenticationAuditLevel="Success" />
    </behavior>
  </serviceBehaviors>
</behaviors>

IIS でホストされていて、クライアント アプリの使用時に正常に動作している私の .svc ファイルを次に示します。

 <%@ ServiceHost Language="C#" Debug="true" Service="WW.Common.Service.Impl.BulkEmailService" %>

これは、サービス参照として使用し、TestBulkEmailService と名付けた WCF サービスの実装と契約です。

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Runtime.Serialization;
  using System.ServiceModel;
  using System.Text;
  using WW.EnterpriseLibrary.Error;
  using WW.Common.Service.Contract;
  using WW.Common.Data.DTO;
  using WW.Common.Data;
  using WW.ServiceCore.Error;
  using WW.ServiceCore.Log;
  using BulkEmailDac = WW.Common.DataAccess.Impl.BulkEmailDac;

  namespace WW.Common.Service.Impl
  {
      public class BulkEmailService : IBulkEmailService
      {

          private BulkEmailDac emailDac;
          ErrorMsg err_msg = new ErrorMsg();

          public BulkEmailService()
          {
              emailDac = new BulkEmailDac();
          }

          public string Abc(string s1)
          {
              string result = s1;
              return result;
          }

          /// <summary>
          /// Get Bulk Email Record List
          /// </summary>
          /// <returns></returns>
          public BulkEmailDTOList GetBulkEmailInfo(int recordLimit)
          {
              try
              {
                  return emailDac.GetBulkEmailInfo(recordLimit);
              }
              catch (Exception ex)
              {
                  if (ex is FaultException<OperationFault>)
                  {
                      //throw;
                      Console.WriteLine("faultException1 Message: " + ex.Message);
                      throw;
                  }
                  else
                  {

                      //LOG AND THROW AN UNKNOWN EXCEPTION
                      ApplicationLog.WriteError(DateTime.Now.ToString() + "|"
                                                + "GetBulkEmailInfo" + "|"
                                                + ex.Message + "|"
                                                + ex.StackTrace);
                      Console.WriteLine("faultException2 Message: " + ex.StackTrace);
                      throw new FaultException<OperationFault>(new OperationFault(ex.Message, ErrorMessages.Unknown_Error_Code));
                  }
              }
          }

契約:

      using System;
 using System.Web;
 using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.Serialization;
 using System.ServiceModel;
 using System.Text;
 using WW.EnterpriseLibrary.Error;
 using WW.Common.Data.DTO;

 namespace WW.Common.Service.Contract
 {
     [ServiceContract]
     public interface IBulkEmailService
     {

         [OperationContract]
         [FaultContractAttribute(typeof(OperationFault))]
         BulkEmailDTOList GetBulkEmailInfo(int recordLimit);


         [OperationContract]
         [FaultContractAttribute(typeof(OperationFault))]
         int SendBulkEmail(string emailFm, string emailTo, string ccTo, string subject, string body);

} 
4

0 に答える 0