【问题标题】:Error: Could not find default endpoint element that references contract错误:找不到引用合同的默认端点元素
【发布时间】:2013-01-23 00:07:03
【问题描述】:

我正在编写以下代码以通过核心服务在 tridion 中创建一个 MM 组件,但运行此服务时出现错误,

 public ComponentData GetNewMultimediaComponent(CoreServiceClient Client, string folderUri, string schemaUri, string title, FileInfo fi)
    {
        if (fi.Extension == ".png")
        {
            string mmType = GetMultiMediaType(fi.Extension);
            if (mmType != null)
            {
                string tempLocation = "";

                UploadResponse us = new UploadResponse();
                using (StreamUploadClient streamClient = GetConnection())
                {
                    FileStream objfilestream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);
                    tempLocation = streamClient.UploadBinaryContent(fi.Name.ToLower(), objfilestream);
                }

                BinaryContentData bcd = new BinaryContentData
                {
                    UploadFromFile = fi.FullName,
                    MultimediaType = new LinkToMultimediaTypeData { IdRef = mmType },
                    Filename = fi.Name,
                    IsExternal = false
                };

                ComponentData res = GetNewComponent(folderUri, schemaUri, title);
                res.ComponentType = ComponentType.Multimedia;
                res.BinaryContent = bcd;

                res = (ComponentData)Client.Create(res, new ReadOptions());

在上面的代码中,我在下面一行得到了错误

using (StreamUploadClient streamClient = new StreamUploadClient()) 



{System.InvalidOperationException: Could not find default endpoint element that references contract 'Tridion.ContentManager.CoreService.Client.IStreamUpload' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.
       at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
       at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
       at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
       at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
       at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
       at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
       at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait).......

只是为了更新,我通过 DLL 使用 tridion 核心服务,没有配置文件并成功创建连接。

连接设置

public StreamUploadClient GetConnection()
    {
        BasicHttpBinding basicHttpBinding = new BasicHttpBinding
        {
            MaxReceivedMessageSize = 10485760,
            ReaderQuotas = new XmlDictionaryReaderQuotas
            {
                MaxStringContentLength = 10485760,
                MaxArrayLength = 10485760
            },
            Security = new BasicHttpSecurity
            {
                Mode = BasicHttpSecurityMode.None,
            }
        };

        EndpointAddress remoteAddress = new EndpointAddress("http://abc/webservices/CoreService2011.svc/streamUpload_basicHttp");

        StreamUploadClient client = new StreamUploadClient(basicHttpBinding, remoteAddress);
        try
        {
            client.Open();
        }
        catch (Exception ex)
        {
           //log.Error("Error:CoreServiceConectionOpen:Common:" + ex.Message);
            throw ex;
        }

        return client;
    }

现在,下面一行出现错误

tempLocation = streamClient.UploadBinaryContent(fi.Name.ToLower(), objfilestream);

{System.ServiceModel.ProtocolException: The content type multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:739a821f-aee2-4eaf-9206-05a1ed19311c+id=1";start-info="text/xml" of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 560 bytes of the response were: '
--uuid:739a821f-aee2-4eaf-9206-05a1ed19311c+id=1
Content-ID: <http://tempuri.org/0>
Content-Transfer-Encoding: 8bit
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:FilePath xmlns:h="http://www.sdltridion.com/ContentManager/CoreService/2011">C:\Windows\TEMP\tmp6841.png</h:FilePath></s:Header><s:Body><UploadResponse xmlns="http://www.sdltridion.com/ContentManager/CoreService/2011"/></s:Body></s:Envelope>
--uuid:739a821f-aee2-4eaf-9206-05a1ed19311c+id=1--
'.

谁能帮我解决这个问题?

【问题讨论】:

    标签: tridion tridion-2011 tridion-core-services


    【解决方案1】:

    问题出在这一行:

    StreamUploadClient streamClient = new StreamUploadClient()
    

    这是您尝试连接的单独端点。通常,它会从 app.config 中选择连接的地址和所有其他属性,但由于您没有任何需要自己提供所有必需参数,类似于您对 CoreService 所做的事情。请参阅 app.config 示例以了解您需要哪些参数。

    类似这样的:

        public StreamUploadClient GetConnection()
        {
            BasicHttpBinding basicHttpBinding = new BasicHttpBinding
            {
                MaxReceivedMessageSize = 10485760,
                ReaderQuotas = new XmlDictionaryReaderQuotas
                {
                    MaxStringContentLength = 10485760,
                    MaxArrayLength = 10485760
                },
                MessageEncoding = WSMessageEncoding.Mtom,
                Security = new BasicHttpSecurity
                {
                    Mode = BasicHttpSecurityMode.None,
                }
            };
    
            EndpointAddress remoteAddress = new EndpointAddress("http://abc/webservices/CoreService2011.svc/streamUpload_basicHttp");
    
            StreamUploadClient client = new StreamUploadClient (basicHttpBinding, remoteAddress);
            try
            {
                client.Open();
            }
            catch (Exception ex)
            {
                log.Error("Error:CoreServiceConectionOpen:Common:" + ex.Message);
                throw ex;
            }
    
            return client;
        }
    

    【讨论】:

    • 我没有使用 app.config 文件,在这种情况下我需要做什么?如您所见,我正在传递具有所有连接详细信息的客户端对象。
    • 我理解你的意思,但是当我这样走时,上面一行 tempLocation = streamClient.UploadBinaryContent(fi.Name.ToLower(), objfilestream);错误:我理解你的意思,但是当我这样做时,上面的行 {System.ServiceModel.ProtocolException: The content type multipart/related; 会出现以下错误。响应消息的 type="application/xop+xml";start="tempuri.org/…" 与绑定的内容类型不匹配(text/xml...
    • 已修复,MessageEncoding = WSMessageEncoding.Mtom 丢失,查看更新示例
    猜你喜欢
    • 2013-05-13
    • 2013-06-27
    • 2023-03-12
    • 2010-11-28
    • 2014-09-14
    • 2011-10-20
    相关资源
    最近更新 更多