dst*_*str 5 .net c# wcf wif .net-4.5
我有一个令牌发行者WCF服务,它使用Microsoft.IdentityModel(WIF 3.5),我需要升级到System.IdentityModel(.NET 4.5).问题是我无法更改服务的原始名称Microsoft.IdentityModel.Protocols.WSTrust.WSTrustServiceContract,而不是更新的服务System.ServiceModel.Security.WSTrustServiceContract.由于某种原因,它不被IntelliSense识别:
蓝色波浪线错误是:
The 'name' attribute is invalid - The value 'System.ServiceModel.Security.WSTrustServiceContract' is invalid according to its datatype 'serviceNameType'
Run Code Online (Sandbox Code Playgroud)
我有程序集引用System.ServiceModel,并System.IdentityModel在<assemblies>节点.
即使我忽略了IntelliSense错误并运行服务并使用浏览器访问它,我也会收到此元数据错误:
Metadata publishing for this service is currently disabled.
Run Code Online (Sandbox Code Playgroud)
元数据发布已启用,因此我认为这是因为服务的名称问题.
另外我从VS.NET WCF测试客户端收到此错误:
Error: Cannot obtain Metadata from http://localhost:49178/Services/Issuer.svc
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: http://localhost:49178/Services/Issuer.svc
Metadata contains a reference that cannot be resolved: 'http://localhost:49178/Services/Issuer.svc'.
There was no endpoint listening at http://localhost:49178/Services/Issuer.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
The remote server returned an error: (404) Not Found.
HTTP GET Error
URI: http://localhost:49178/Services/Issuer.svc
The HTML document does not contain Web service discovery information.
Run Code Online (Sandbox Code Playgroud)
我认为" Metadata contains a reference that cannot be resolved"行也指服务名解析错误.
关于该做什么的任何想法?我很感激任何帮助..
Issuer.svc:
<%@ ServiceHost Language="C#" Debug="true" Factory="Identity.Services.Wcf.Core.CustomSecurityTokenServiceContractFactory" Service="CustomSecurityTokenServiceConfiguration" %>
Run Code Online (Sandbox Code Playgroud)
厂:
public class CustomSecurityTokenServiceContractFactory : WSTrustServiceHostFactory
..
Run Code Online (Sandbox Code Playgroud)
服务:
public class CustomSecurityTokenServiceConfiguration : SecurityTokenServiceConfiguration
..
Run Code Online (Sandbox Code Playgroud)
有时,解决此类问题的最佳方法是从头开始创建一个新的 WCF 项目,再次配置端点等......并从旧项目复制现有服务,从旧版本的 WCF 迁移时尤其如此。 。
这是我每次遇到 WCF 服务问题时都会遵循的清单:
服务器
确保您的服务契约是使用具有适当属性的接口定义的,例如:
IMyService.cs
[ServiceContract]
public interface IMyService
{
[OperationContract]
int ThisAnOperation(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
检查您是否已使用正确的界面实施合同:
MyService.cs
public class MyService: IMyService
{
public int ThisAnOperation(int a, int b)
{
return a * b;
}
}
Run Code Online (Sandbox Code Playgroud)
你需要有一个服务主机来访问你的服务,它们是扩展名为.svc的文件:
添加以下代码行,引用实现您的服务的类:
<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.MyService" CodeBehind="MyService.cs" %>
最后,您需要设置一个绑定,该绑定将定义可用于访问服务器的传输和协议,从简单的基本 HTTP 绑定开始,以检查您的服务是否按预期工作,然后将其更改为更适合生产的内容,包括根据需要进行身份验证和/或加密和压缩。
设置基本 HTTP 绑定:
<system.serviceModel>...</system.serviceModel>如果该块已存在,请从文件 web.config 中删除该块。
构建您的解决方案,它应该成功编译,否则修复任何错误并重试。
右键单击您的 web.config 文件,然后单击“编辑 WCF 配置”,然后单击“创建新服务”,在服务类型中,浏览并选择编译服务时生成的 DLL 文件(应位于 bin 中)文件夹)并选择您要发布的服务类别:
指定服务合同(应自动填写)。
在下一页中,选择您的服务的传输协议,在本例中为“HTTP”,然后选择“基本 Web 服务互操作性”。
在下一页中,您可以指定端点的地址,出于测试目的,您可以将此字段留空(确保您还从文本字段中删除“HTTP”)。
单击下一步,关闭配置窗口并保存。
现在您应该能够运行该服务并浏览到 MyService.svc 以访问您的服务。
激活元数据发布以便可以找到您的服务,为此,请将以下行为添加到您的 web.config:
<system.serviceModel>
<services>
<service name="WcfService1.MyService">
<endpoint binding="basicHttpBinding"
bindingConfiguration="" contract="WcfService1.IMyService"
BehaviorConfiguration="MyServiceBehaviors" />
</service>
</services>
</system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)现在您应该能够运行您的项目并在浏览器中获取服务的元数据描述页面,客户端可以使用此信息来查找服务并生成服务的代理:
客户端
尝试通过完成向导来生成代理,重建您的项目并尝试。如果仍然遇到同样的问题,请删除生成的参考并重复第 1 点和第 2 点,然后:
单击“高级”并取消选中“在引用的程序集中重用类型”:
然后完成向导并编译。
希望现在一切正常!
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |