Преобразование ASMX в WCF - PullRequest
       12

Преобразование ASMX в WCF

2 голосов
/ 16 апреля 2011

У меня был сервис asmx в .NET Framework 3.5, который я сейчас преобразовал в .NET Framework 4.0. Теперь я хочу запустить этот сервис как сервис WCF с тем же расширением ASMX. Я прочитал пару блогов, в которых есть пошаговая процедура для их преобразования. Однако все они ссылаются на .NET Framework 3.5. Вот ссылки, которые я получил из интернета.

Я пробовал это, и они хорошо работают с 3.5 Framework, но не с 4.0 Framework. Я получил ошибку

Невозможно привести объект типа 'System.Web.Compilation.BuildResultCustomString' печатать 'System.Web.Compilation.BuildResultCompiledType'.

, в который я добавил раздел httpHandler, и он исчез. Однако теперь я получаю новую ошибку

Не удалось загрузить тип 'System.ServiceModel.Activation.HttpHandler' из сборки 'System.ServiceModel, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089'

Может кто-нибудь помочь мне с этой ошибкой.

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Я установил, что aspNetCompatibilityEnabled имеет значение true, например:

Добавьте ссылку на:

System.ServiceModel.Activation

в вашем файле web.config:

<system.web>
<compilation debug="true" targetFramework="4.0">
  <buildProviders>
    <remove extension=".asmx"/>
    <add extension=".asmx" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  </buildProviders>
</compilation>
</system.web>

<system.webServer>
<handlers>
  <remove name="WebServiceHandlerFactory-Integrated"/>
  <add name="MyNewAsmxHandler" path="*.asmx" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>


учитывайте изменения типа и publickeytoken в обработчике!

Это должно быть ' System.ServiceModel.Activation ' вместо'System.ServiceModel' и ' PublicKeyToken = 31bf3856ad364e35 ', поскольку Microsoft разделила их на отдельные сборки

1 голос
/ 17 апреля 2011

Я думаю, вам может потребоваться правильно зарегистрировать обработчики .NET 4 в IIS. Запустите ServiceModelReg.exe -ia из каталога платформы .NET 4 и посмотрите, поможет ли это.

C:\Windows\Microsoft.NET\Framework\v4.0.30319>ServiceModelReg.exe /?
Microsoft (R) WCF/WF registration tool version 4.0.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Administration utility that manages the installation and uninstallation of
WCF and WF components on a single machine.

Usage:
    ServiceModelReg.exe [(-ia|-ua|-r)|((-i|-u) -c:<command>)] [-v|-q] [-nologo]
[-h]
  -ia
    Install all components
  -ua
    Uninstall all components
  -r
    Extended only.  Repairs all components
  -i
    Install components specified with -c
  -u
    Uninstall components specified with -c
  -c:<component>
    Install/uninstall a component:
      httpnamespace        - HTTP namespace reservation
      tcpportsharing       - TCP port sharing service
      tcpactivation        - TCP activation service (unsupported on .NET 4 Clien
t Profile)
      namedpipeactivation  - Named pipe activation service (unsupported on .NET
4 Client Profile)
      msmqactivation       - MSMQ activation service (unsupported on .NET 4 Clie
nt Profile)
      etw                  - ETW event tracing manifests (Windows Vista or later
)
    Can be used to install several components at the same time
  -q
    Quiet mode (only error logging)
  -v
    Verbose mode
  -nologo
    Suppress the copyright and banner message
  -h
    Displays this help text.

Examples:
    ServiceModelReg.exe -ia
      Installs all components
    ServiceModelReg.exe -i -c:httpnamespace -c:etw
      Installs HTTP namespace reservation and ETW manifest
    ServiceModelReg.exe -u -c:etw
      Uninstalls ETW manifests
    ServiceModelReg.exe -r
      Repairs an extended install
...