Служба WCF, работающая на локальном несерверном IIS для функций - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть базовая служба WCF, работающая на сервере IIS, на ней также находится база данных SQL.

локально, когда я запускаю его, он работает нормально, и все мои сервисные функции работают, однако после публикации на сервере IIS я получаю

The server encountered an error processing the request. Please see the service help page for constructing valid requests to the service.

Только при вызове / function

если я просто перехожу на стартовую страницу, я получаю конечную точку, не найденную, что аналогично моему локальному.

вот как выглядит мой service.svc

using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System.Web.Script.Services;
using Newtonsoft.Json.Linq;

namespace myNameSpace
{
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service
    {


        /// <summary>
        /// ....
        /// </summary>
        /// <returns>string</returns>
        [WebInvoke(UriTemplate = "/NextWeek", Method = "GET")]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string nextWeek()
        {
            return db.Instance.getNextWeek();
        }

        //this continues for awhile and is basically the same type of functions

    }
}

Я также создал global.asax

   public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(Service)));
        }
    }

и вот мой web.config

Изначально я получал ошибку 404, но мне удалось устранить ее там, где показано, что мой сервис имеетнет конечной точки.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.5" />
      </system.Web>
  -->
  <system.web>
    <compilation targetFramework="4.6" />
    <pages controlRenderingCompatibilityVersion="4.0" />
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default
            endpoint via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- 
              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="true" />

        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <connectionStrings>
    .....
  </connectionStrings>
</configuration>

Я пробовал несколько разных вариантов с конфигурацией, которую я нашел на сайте Microsoft, но это не помогло.

спасибо.

1 Ответ

1 голос
/ 19 апреля 2019

Я заметил, что вы используете структуру ORM для возврата записи в БД. Если служба работает правильно на локальном, а не на сервере, мне кажется, что с подключением к базе данных что-то не так, попробуйте проверить строку подключения, избегая использования встроенной безопасности Windows для подключения к базе данных.
Кроме того, вот мои фрагменты кода о размещении wcf сервиса Restful style.
Сервер (приложение службы wcf)

[OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    Product GetProduct(int ID);
    public Product GetProduct(int ID)
    {
        TestStoreEntities entities = new TestStoreEntities();
        return entities.Products.FirstOrDefault(x => x.Id == ID);
    }

Конфигурация.

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="http" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Строка подключения.

<connectionStrings><add name="TestStoreEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.157.18.36;initial catalog=TestStore;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...