【问题标题】:Type casting issue in C# and wcf header in .NETC# 中的类型转换问题和 .NET 中的 wcf 标头
【发布时间】:2015-05-20 11:28:18
【问题描述】:

我现在正在使用 Visual Studio 2013 开发 WCF 服务。我的服务包含必须传递的自定义标头字段。字段名是"lisenseKey"我开发的。 WCF 服务工作正常。现在我要打电话给我的服务进行测试。我添加了对客户端项目的服务引用。现在我这样打电话:

MyService.Myservice proxy = new MyService.Myservice();
proxy.LisenseKey = "xxxxxx";
Label1.Text = proxy.GetMessage(TextBox1.Text);

当我像这样分配许可证密钥值时,它显示带有红色下划线的错误:

“无法将类型字符串隐式转换为 MyService.MyService.string”

如何在这种情况下键入 cast?或者有什么方法可以传递标题?而且我不知道怎么用"MessageHeader"

【问题讨论】:

  • 您可以发布您的服务的代码吗?
  • 这是我的服务代码。请任何人都可以帮助我。我只是想使用“GetMessage”服务

标签: c# .net wcf


【解决方案1】:

这是我的服务代码。我只是想使用“GetMessage”方法。

[ServiceContract]
    public interface IMyservice
    {
        [OperationContract]
        void DoWork();

        [OperationContract]
        string GetMessage(string name);
    }

    public class MyServiceMessageInspector:System.ServiceModel.Dispatcher.IDispatchMessageInspector
    {
        public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request,System.ServiceModel.IClientChannel channel,
            System.ServiceModel.InstanceContext instanceContext)
        {
            if(request.Headers.FindHeader("LisenseKey","")==-1)
            {
                throw new FaultException("Lisense Key Was Not Provided");
            }

            var lisenseKey = request.Headers.GetHeader<string>("LisenseKey", "");
            if (string.IsNullOrEmpty(lisenseKey))
            {
                throw new FaultException("Lisnse key is not valid");
            }

            if(lisenseKey!="12345x")
            {
                throw new FaultException("Lisense key is not valid");
            }

            return instanceContext;
        }

        public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply,object correlationState)
        {

        }
    }

    public class MyServiceMessageInspectorBehaviour:Attribute,System.ServiceModel.Description.IServiceBehavior
    {
        public void AddBindingParameters(System.ServiceModel.Description.ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase,
            System.Collections.ObjectModel.Collection<System.ServiceModel.Description.ServiceEndpoint> endpoints,
            System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {

        }

        public void ApplyDispatchBehavior(System.ServiceModel.Description.ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            foreach(ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers)
            {
                foreach(var endpointDispatcher in channelDispatcher.Endpoints)
                {
                    endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new MyServiceMessageInspector());
                }
            }
        }

        public void Validate(System.ServiceModel.Description.ServiceDescription serviceDescription,System.ServiceModel.ServiceHostBase serviceHostBase)
        {

        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多