【问题标题】:WCF un-expected end of file errorWCF 意外的文件结束错误
【发布时间】:2013-09-03 09:07:39
【问题描述】:

最近我升级了我的项目from .NET Framework 3.5 to 4.0. 对于 WCF,我正在使用自定义基本身份验证。

在转换之前,一切正常。但是,转换后我得到“Unexpected end of file error”。堆栈跟踪如下:

at System.Xml.EncodingStreamWrapper.ProcessBuffer(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding)
   at System.Xml.XmlUTF8TextReader.SetInput(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
   at System.Xml.XmlDictionaryReader.CreateTextReader(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
   at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
   at System.ServiceModel.Channels.WebMessageEncoderFactory.WebMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
   at System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage(Message message)
   at System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)
   at System.ServiceModel.Channels.HttpPipeline.EmptyHttpPipeline.SendReplyCore(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.HttpPipeline.EmptyHttpPipeline.SendReply(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.HttpRequestContext.OnReply(Message message, TimeSpan timeout)
   at System.ServiceModel.Activation.HostedHttpContext.OnReply(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.RequestContextBase.Reply(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.RequestContextBase.Reply(Message message)
   at ihv1Role.auth.BasicAuthenticationInterceptor.ProcessRequest(RequestContext& requestContext) in d:\src\auth\BasicAuthenticationInterceptor.cs:line 78

我得到错误的类和方法如下:

p

ublic class BasicAuthenticationInterceptor : RequestInterceptor
{
    MembershipProvider provider;
    string realm;

    public BasicAuthenticationInterceptor(MembershipProvider provider, string realm)
        : base(false)
    {
        this.provider = provider;
        this.realm = realm;
    }
    protected string Realm
    {
        get { return realm; }
    }
    protected MembershipProvider Provider
    {
        get { return provider; }
    }

    public override void ProcessRequest(ref RequestContext requestContext)
    {
        HttpRequestMessageProperty request = (HttpRequestMessageProperty)requestContext.RequestMessage.Properties[HttpRequestMessageProperty.Name];
        string[] credentials = ExtractCredentials(requestContext.RequestMessage);

        if (credentials.Length > 0 && AuthenticateUser(credentials[0], credentials[1], IsTestMode))
        {
            InitializeSecurityContext(requestContext.RequestMessage, credentials[0]);
        }
        else
        {
            Message reply = Message.CreateMessage(MessageVersion.None, null);
            HttpResponseMessageProperty responseProperty = new HttpResponseMessageProperty() { StatusCode = HttpStatusCode.Unauthorized };
            responseProperty.Headers.Add("WWW-Authenticate",
            String.Format("Basic realm=\"{0}\"", Realm));
            reply.Properties[HttpResponseMessageProperty.Name] = responseProperty;
            requestContext.Reply(reply); // **Here I am getting error**
            requestContext = null;
        }
    }
}

如果标题中的用户名和密码有效,则整个服务运行良好。仅当请求未经过身份验证时,我才会收到此错误。

有什么办法吗?

谢谢

【问题讨论】:

    标签: asp.net wcf c#-4.0


    【解决方案1】:

    我自己解决了:

    我在 Web.config 中添加了两次标签。

    删除它,现在我的服务运行良好。

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2018-06-14
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2017-06-08
      • 2019-07-31
      相关资源
      最近更新 更多