【发布时间】: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