wcf与元数据的错误

时间:2012-04-27 15:29:55

标签: c# wcf

当我从控制台应用程序引用WCF服务时,我收到元数据错误。 “从地址下载元数据时出错”。这是我的服务代码。我感谢任何帮助。

namespace WcfService1
{
    public class Service1 : IService1
    {
        public void test(string parm1, long parm2, Stream parm3)
        {

            string folder1 = @"C:\TEST";
            string fileName = Path.Combine(folder1, parm1);

            using (FileStream target = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
            {

                    const int bufferLen = 65536;
                    byte[] buffer = new byte[bufferLen];
                    int count = 0;
                    while ((count = parm3.Read(buffer, 0, bufferLen)) > 0)
                    {
                        target.Write(buffer, 0, count);
                    }
            }

        }
    }
}

    namespace WcfService1
    {

        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            void test(string parm1, long parm2, Stream parm3);
        }
    }

这是Config:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 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="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

1 个答案:

答案 0 :(得分:0)

这很可能是因为您将System.IO.Stream作为参数进行测试。根据我的经验(有人可能会来这里纠正我)你有两个选择:

  1. 将请求包装在请求对象中(见下文)。
  2. 删除param1和param2,仅使用Stream-param。
  3. 服务接口:

    [ServiceContract]
    public interface IService1
    {
    
            [OperationContract]
            void test(Request request);
    }
    

    DataContract:

    namespace WcfService1
    {
        [DataContract]
        public class Request
        {
            [DataMember]
            public string Param1 { get; set; }
            [DataMember]
            public long Param2 { get; set; }
            [DataMember]
            public Stream Param3 { get; set; }
        }
    }
    

    对于Stream的子集使用[KnownType]可能还需要一些额外的工作,但我对此非常不确定。上面的内容应该至少让您远离添加服务引用时看到的MetaData错误。