javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

CodeGo.net> WCF传输与消息

我正在阅读有关WCF安全性实现的信息,发现有两种类型的安全性:     Transport Mode and Message Mode (or both)

如果我将HTTPS用作传输模式,是否也使用消息安全性是否更安全? 我问这是因为我的理解如下:

https使用SSL协议对邮件进行加密...因此,为什么要添加Message Security并加密SSL加密的邮件? 还是我误会了东西?

trans by 2020-02-17T08:51:29Z

ASP.NET MVC和Web服务

在我的ASP.NET MVC项目中添加Web服务是否破坏了MVC的整个概念?

该Web服务(WCF)依赖于我的MVC项目中的模型层与后端进行通信(因此在我看来,它需要成为MVC解决方案的一部分)。

我应该将此添加到Controller或Model层吗?

trans by 2020-02-17T03:27:50Z

NET Core中WCF替代什么?

我习惯于创建.Net Framework控制台应用程序,并通过WCF服务从头开始使用类库(.Net Framework)公开Add(int x, int y)函数。 然后,我使用控制台应用程序在服务器内代理调用此功能。

但是,如果我使用控制台应用程序(.Net Core)和类库(.Net Core),则System.ServiceModel不可用。 我已经做了一些谷歌搜索,但是我还没有弄清楚在这种情况下用什么“替代” WCF。

如何将类库中的Add(int x, int y)函数公开给.Net Core中的控制台应用程序? 我看到了System.ServiceModel.Web,由于这是跨平台的,所以我必须创建一个RESTful服务吗?

trans by 2020-02-15T00:00:04Z

wcf-RESTful Web服务主体形式

我是Wrapped的新手。我正在做一些简单的RESTful WCF操作合同。 而且,我对属性类WebInvoke的属性BodyStyle的选项有疑问。一个选项是WebMessageBodyStyle.Bare,另一个是WebMessageBodyStyle.Wrapped

  • 我什么时候应该使用Wrapped
  • When should I use Wrapped?

谢谢您的帮助。

trans by 2020-02-13T15:47:01Z

我想念关于WCF的什么?

在此阶段,我从事MS技术开发的时间比我想念的要长。 当.NET出现时,我以为他们非常满意,并且随着每个迭代和版本的到来,我认为他们的技术越来越强大,并期待着每个版本。

但是,由于不得不在去年与WCF合作,我必须说我发现该技术很难使用和理解。 最初它很吸引人,但是当您开始了解它的内容时,配置是一场噩梦,它必须覆盖行为,包括消息大小,消息中包含的对象数,安全模型的复杂性,有故障时的代理处理以及最后 回到使用代码而不是XML定义接口。

它只是开箱即用,我认为应该。 我们在测试自己或在我们的产品停产时发现了上述所有问题。

我确实了解这一切的基本原理,但是可以肯定的是,他们本可以提出更简单的实现机制。

我想我要问的是

  • 我看WCF的方式有误吗?
  • 它在...方面有什么优势备择方案?
  • 我应该在什么情况下选择使用WCF?

好的,很抱歉延迟响应,有时确实有令人讨厌的习惯:)

一些澄清我想我使用WCF的主要要点包括以下几个方面虽然开箱即用,但您的左侧却隐藏着一些重大惊喜。 如上所指出的,基本的东西是被限制的,直到被覆盖

  1. 可以传递的字符串大小不能超过8K
  2. 单个消息中可以传递的对象数量受到限制
  3. 代理无法自动从故障中恢复
  4. 拥有大量的配置是一件好事,但是要理解所有配置以及使用什么以及在什么情况下使用这些配置可能很难理解。 尤其是在具有不同安全要求等的现场部署软件时。在谈论配置时,我们不得不将很多数据库隐藏在后端数据库中,因为现场的安全和网络人员试图在不理解的情况下更改配置文件中的内容 它。
  5. 在代码中保留接口的配置,而不是转移到XML中的显式定义的接口,几乎所有对象都可以发布和使用该接口。 我知道我们可以从程序集中导出XML,但是其中充满了垃圾,某些代码生成器对此感到窒息。

我知道世界在变化,在过去的20年中(我已经开发了22年),我已经移动了很多次,并且正在积极使用WCF,所以请不要误会我的意思,我确实了解它的用途,并且 前进的方向。

我只是认为应该有更简单的配置/部署选项,更容易的设置和更好的配置管理(也许是SQL config提供程序,而不只是web.config / app.config文件)。

trans by 2020-02-12T14:22:02Z

.net-System.ServiceModel.Web.dll在哪里?

我正在开发Windows服务,该服务公开了打算由Silverlight应用程序使用的WCF服务,如本博客文章所述:[http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/03/27/ 10291.aspx]

我面临的问题是我需要使用在System.ServiceModel.Web.dll560程序集中定义的WebInvoke属性,但是当我尝试在项目中添加对该程序集的引用时(通过使用Visual Studio的“添加引用”对话框-.NET选项卡) ,没有使用该名称的程序集。

所以,我做错什么了吗,该程序集不是标准.NET Framework的一部分,还是Visual Studio中的错误? 顺便说一下,我正在使用VS2010 beta 2,该项目的目标是.NET Framework 4。

trans by 2020-02-12T00:51:23Z

wcf-数据con中的IsReference属性

DataContractIsReference属性的用途是什么? 请求和响应如何随应用此属性而变化?

trans by 2020-02-09T11:35:37Z

c#-ELMAH-没有HttpContex的异常记录

我用Elmah.XmlFileErrorLog尝试了此解决方案,但出现了以下异常

System.ArgumentNullException was unhandled by user code
  Message="Value cannot be null.\r\nParameter name: context"
  Source="Elmah"
  ParamName="context"
  StackTrace:
       at Elmah.ErrorSignal.FromContext(HttpContext context) in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 67
       at Elmah.ErrorSignal.FromCurrentContext() in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 61
       at ElmahHttpErrorHandler.ProvideFault(Exception error, MessageVersion version, Message& fault) in c:\Myapplication\App_Code\Util\ElmahHttpErrorHandler.cs:line 19
       at System.ServiceModel.Dispatcher.ErrorBehavior.ProvideFault(Exception e, FaultConverter faultConverter, ErrorHandlerFaultInfo& faultInfo)
       at System.ServiceModel.Dispatcher.ErrorBehavior.ProvideMessageFaultCore(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessageCleanup(MessageRpc& rpc)
  InnerException: 

Web.Config文件

<configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
  <sectionGroup name="elmah">
    <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
    <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
    <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
    <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
  </sectionGroup>
</configSections>
<httpHandlers>
  <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</httpModules>
...

<elmah>
  <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
  <security allowRemoteAccess="1" />
</elmah>

我正在使用Windows7。与它相关的任何问题吗?

更新注意:我正在ASP.NET下运行WCF服务。 即,我已经通过添加新网站将WCF服务项目添加到解决方案中,然后选择WCF服务模板。 我目前正在IDE中运行它。 托管在IIS上也没有帮助。

trans by 2020-02-08T01:17:12Z

c#-在WCF / .NET中返回数据表

我有一个WCF服务,我想从中返回一个DataTable。 我知道,就返回DataTables是否是一个好习惯而言,这通常是一个备受争议的话题。 让我们搁置片刻。

如下所述,当我从头开始创建DataTable时,没有任何问题。 该表已创建,填充并返回给客户端,一切正常:

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    for(int i=0;i<100;i++)
    {
        tbl.Columns.Add(i);
        tbl.Rows.Add(new string[]{"testValue"});
    }
    return tbl;
}

但是,一旦我出去访问数据库以创建表,如下所示,我得到了CommunicationException“基础连接已关闭:该连接意外关闭。”

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    //Populate table with SQL query

    return tbl;
}

该表已在服务器端正确填充。 它比我循环并返回的测试表小得多,查询又小又快-这里没有超时或大数据传输的问题。 使用相同的确切函数和DataContracts / ServiceContracts / BehaviorContracts。

为什么填充表格的方式对返回成功有影响?

trans by 2020-02-05T19:29:54Z

如何确保您没有收到WCF故障状态异常?

我收到此异常:

通讯对象,   System.ServiceModel.Channels.ServiceChannel,   不能用于通讯   因为它处于故障状态。

WCF服务使用默认的wsHttpBinding。 无论我在哪里使用WCF,都可以通过以下方式使用WCF:

using (var proxy = new CAGDashboardServiceClient())
{
    proxy.Open();
    var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue);
    ddlSites.DataSource = result;
    ddlSites.DataBind();
    proxy.Close();
}

消息中显示的错误行似乎在最后一个proxy.close之后。 不知道发生了什么。 我正在从Visual Studio 08内部启动该服务。

这是跟踪信息:

The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

Server stack trace: 
  at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)

Exception rethrown at [0]: 
  at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
  at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
  at System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
  at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
  at System.ServiceModel.ClientBase`1.Close()
  at System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()
  at CAGDashboard.UserControls.ucVolunteerCRUDGrid.ddlRegions_SelectedIndexChanged(Object sender, EventArgs e) in C:\Documents and Settings\rballalx\My Documents\Visual Studio 2008\Projects\DashboardCAG\CAGDashboard\UserControls\ucVolunteerCRUDGrid.ascx.cs:line 81
  at System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged(EventArgs e)
  at System.Web.UI.WebControls.DropDownList.RaisePostDataChangedEvent()
  at System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent()
  at System.Web.UI.Page.RaiseChangedEvents()
  at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
trans by 2020-02-04T11:55:14Z

CodeGo.net>如何以编程方式修改WCF app.config端点地址设置?

我想以编程方式修改我的app.config文件以设置应使用哪个服务文件端点。 在运行时执行此操作的最佳方法是什么? 以供参考:

<endpoint address="http://mydomain/MyService.svc"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IASRService"
    contract="ASRService.IASRService" name="WSHttpBinding_IASRService">
    <identity>
        <dns value="localhost" />
    </identity>
</endpoint>
trans by 2020-02-04T04:29:29Z

c#-是否可以在没有SDK的情况下调用Dynamics CRM 2011后期WCF组织服务-直接自定义绑定?

我正在尝试实现一个纯WCF方案,该方案中我想调用Dynamics CRM WCF服务而不依赖于SDK帮助程序类。 基本上,我想仅使用.net框架的本机WCF支持针对Dynamics CRM 2011实施联合身份验证。

我这样做的原因是,我想稍后将此情况移植到BizTalk。

我已经使用SvcUtil成功生成了代理类,但是部分策略和安全性断言与配置模式不兼容。 SvcUtil建议改为从代码构建绑定,这就是我要尝试做的事情。

结果代码在这里:

        private static void CallWcf()
    {
        OrganizationServiceClient client = null;

        try
        {
            // Login Live.com Issuer Binding

            var wsHttpBinding = new WSHttpBinding();
            wsHttpBinding.Security = new WSHttpSecurity();
            wsHttpBinding.Security.Mode = SecurityMode.Transport;

            // Endpoint Binding Elements

            var securityElement = new TransportSecurityBindingElement();
            securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDes;
            securityElement.IncludeTimestamp = true;
            securityElement.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
            securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
            securityElement.SecurityHeaderLayout = SecurityHeaderLayout.Strict;

            var securityTokenParameters = new IssuedSecurityTokenParameters();
            securityTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
            securityTokenParameters.ReferenceStyle = SecurityTokenReferenceStyle.Internal;
            securityTokenParameters.RequireDerivedKeys = false;
            securityTokenParameters.TokenType = null;
            securityTokenParameters.KeyType = SecurityKeyType.SymmetricKey;
            securityTokenParameters.KeySize = 192;
            securityTokenParameters.IssuerAddress = new EndpointAddress("https://login.live.com/extSTS.srf");
            securityTokenParameters.IssuerMetadataAddress = null;
            securityTokenParameters.DefaultMessageSecurityVersion = null;
            securityTokenParameters.IssuerBinding = wsHttpBinding;

            securityElement.EndpointSupportingTokenParameters.Signed.Add(securityTokenParameters);

            var textMessageEncodingElement = new TextMessageEncodingBindingElement();
            textMessageEncodingElement.MaxReadPoolSize = 64;
            textMessageEncodingElement.MaxWritePoolSize = 16;
            textMessageEncodingElement.MessageVersion = MessageVersion.Default;
            textMessageEncodingElement.WriteEncoding = System.Text.Encoding.UTF8;

            textMessageEncodingElement.ReaderQuotas.MaxStringContentLength = 8192;
            textMessageEncodingElement.ReaderQuotas.MaxArrayLength = 16384;
            textMessageEncodingElement.ReaderQuotas.MaxBytesPerRead = 4096;
            textMessageEncodingElement.ReaderQuotas.MaxNameTableCharCount = 16384;

            var httpsTransportElement = new HttpsTransportBindingElement();
            httpsTransportElement.ManualAddressing = false;
            httpsTransportElement.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;

            CustomBinding binding = new CustomBinding();
            binding.Elements.Add(securityElement);
            binding.Elements.Add(textMessageEncodingElement);
            binding.Elements.Add(httpsTransportElement);

            client = new OrganizationServiceClient(binding, new EndpointAddress(EndpointUri));
            client.ClientCredentials.UserName.UserName = Username;
            client.ClientCredentials.UserName.Password = Password;
            client.Open();

            var columnSet = new schemas.microsoft.com.xrm._2011.Contracts.ColumnSet();
            var identifier = new Guid("fbf8240e-2c85-e011-ad55-1cc1de0878eb");

            columnSet.Columns = new string[] { "name" };
            var entity = client.Retrieve("account", identifier, columnSet);
        }

        finally
        {
            if (client != null)
                client.Close();
        }
    }

我是联邦身份验证的新手,并且很难弄清许多可用绑定之间的潜在差异,因此,我在这方面的任何帮助将不胜感激。

trans by 2020-02-04T01:05:57Z

.net-任何使DataContractJsonSerializer正确序列化Dictionary的方法吗?

DataContractJsonSerializer无法正确序列化Dictionary。

而JavaScriptSerializer将Dictionary序列化为{"abc":"xyz","def":42}例如,DataContractJsonSerializer改为提供[{"Key":"abc","Value":"xyz"},{"Key":"def","Value":42}]

这确实有问题,我想知道如何在WCF服务中正确序列化Dictionary对象。 我正在寻找需要最少努力的解决方案。

参考:[http://msdn.microsoft.com/en-us/library/bb412170.aspx]

这是我最后用来在WCF中正确地对字典进行序列化的解决方法:[http://social.msdn.microsoft.com/forums/en-US/wcf/thread/765f1569-0422-4471-8ec2-1d03b2026771]

trans by 2020-01-30T11:19:26Z

c#-Task <>不包含“ GetAwaiter”的定义

客户

iGame Channel = new ChannelFactory<iGame> ( new BasicHttpBinding ( BasicHttpSecurityMode . None ) , new EndpointAddress ( new Uri ( "http://localhost:58597/Game.svc" ) ) ) . CreateChannel ( );

public Task<SerializableDynamicObject> Client ( SerializableDynamicObject Packet )
{
    return Task<SerializableDynamicObject> . Factory . FromAsync ( Channel . BeginConnection , Channel . EndConnection , Packet , null );
}

合同

    [OperationContract ( AsyncPattern = true )]
    IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State );

    SerializableDynamicObject EndConnection ( IAsyncResult Result );

服务

public IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State )
{
    dynamic Request = Message;
    dynamic Response = new SerializableDynamicObject ( );
    if ( Request . Operation = "test" )
    {
        Response . Status = true;
    }
    Response . Status = false;

    return new CompletedAsyncResult<SerializableDynamicObject> ( Response );
}

public SerializableDynamicObject EndConnection ( IAsyncResult Result )
{
    return ( Result as CompletedAsyncResult<SerializableDynamicObject> ) . Data;
}

从Silverlight客户端公开服务

private async void myButton ( object sender , RoutedEventArgs e )
{
    dynamic Request = new SerializableDynamicObject ( );
    Request . Operation = "test";

    var task = Client ( Request );
    var result = await task;  // <------------------------------ Exception
}

例外

Task<SerializableDynamicObject > does not contain a definition for 'GetAwaiter'

怎么了 ?


编辑1:

简而言之,

Visual Studio 2012 RC Silverlight 5应用程序使用了由ASP.net托管的Game WCF 4服务。4通过共享便携式库通过ChannelFactory技术应用程序.NET4 / SL5包含带有异步CTP的iGame接口

图表:
ASP.NET <=类库(游戏)<=可移植库(iGame)=> Silverlight


编辑2:

  • 我的SL5客户端中添加了Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5.dll
  • 使用系统。 穿线。 任务;
trans by 2020-01-28T23:03:42Z

WCF中的DataContract有什么意义?

当您创建WCF项目时,VS.net会创建一个模板。

它将一个类添加到iService1.cs文件:

// Use a data contract as illustrated in the sample below to
// add composite types to service operations.
[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember]
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

由于WCF服务可以返回任何用户定义的类,因此为什么要使用DataContract和CompositeType类?

我可以返回类似的内容:

 [OperationContract]
MyUserCollection GetUsers();

我想念什么?

trans by 2020-01-28T17:15:00Z

C#-WCF中的“端点”是什么?

我的印象是,在配置文件中将端点定义为可能的客户端列表,但这没有任何意义(就我假设它说什么计算机可以连接到该服务而言),现在我正在收集更多信息。 定义,所以有人可以向我解释终点吗? 我了解定义合同接口然后执行合同的概念,但是我迷失了介于两者之间的东西,实际上有一些可用之处。

在这种情况下,地址是什么? 主机地址?

绑定是否正确使用了通信方法/协议?

合同本质上就是“共享对象”(是的,我知道这在技术上是不正确的,但请在此处与我合作)

trans by 2020-01-27T00:20:42Z

rest-如何在RESTful WCF服务中删除“ .svc”扩展名?

据我所知,RESTful WCF的URL中仍然带有“ .svc”。

例如,如果服务界面类似于

[OperationContract]
[WebGet(UriTemplate = "/Value/{value}")]
string GetDataStr(string value);

访问URI就像“ [http://machinename/Service.svc/Value/2”。]在我的理解中,REST优势的一部分是它可以隐藏实现细节。 诸如“ [http:// machinename / Service / value / 2“]之类的RESTful URI可以由任何RESTful框架实现,但是“ [[http://machinename/Service.svc/value/2”]]公开了其实现是 WCF。

如何删除访问URI中的“ .svc”主机?

trans by 2020-01-26T18:46:08Z

C#-与WCF服务共享枚举

我想共享一个C#枚举,但我有几个不同的应用程序。 我不太清楚如何在常规应用程序和WCF服务之间共享枚举声明。

这是情况。 我有2个轻量级C#桌面应用程序和WCF Web服务,它们都需要共享枚举值。

客户1有

 Method1( MyEnum e, string sUserId );

客户端2有

Method2( MyEnum e, string sUserId );

Web服务有

ServiceMethod1( MyEnum e, string sUserId, string sSomeData);

我最初的做法是创建一个名为Common.dll的库来封装枚举,然后在需要枚举的所有项目中引用该库。 但是,WCF使事情变得困难,因为您需要标记枚举才能使其成为服务的组成部分。 像这样:

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod1( MyEnum e, string sUserId, string sSomeData);
}

[DataContract]
public enum MyEnum{ [EnumMember] red, [EnumMember] green, [EnumMember] blue };  

那么....是否有一种在WCF服务和其他应用程序之间共享枚举的方法?

trans by 2020-01-26T16:13:48Z

.net-找不到WCF合同名称'IMyService'?

在服务“ MyService”实现的合同列表中找不到合同名称“ IMyService”。---> System.InvalidOperationException:在“服务”实现的合同列表中找不到合同名称“ IMyService” 服务“ MyService”。

这真让我抓狂。 我有一个可以在我的开发机上运行的WCF Web服务,但是当我将其复制到用于测试的虚拟机上时,出现了似乎表明我没有实现该接口的错误,但是它没有使我 感觉是因为该服务确实可以在我的Windows XP IIS上运行。 虚拟机使用Windows Server 2003 IIS。 有任何想法吗?

这里要注意的一件事是,即使我只是尝试以客户端的形式在Web浏览器中访问服务,我也在我的VM上收到此错误。

注意:我正在使用principalPermissionMode =“ UseWindowsGroups”,但这在我的本地计算机上不是问题。 我只是将自己添加到适当的Windows组中。 但是我的虚拟机没有运气。

配置:

<configuration>
    <system.serviceModel>
        <diagnostics>
            <messageLogging logEntireMessage="false" maxSizeOfMessageToLog="2147483647" />
        </diagnostics>
        <services>
            <service behaviorConfiguration="MyServiceBehaviors" name="MyService">
                <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"
                  name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com"
                  contract="IMyService">
                </endpoint>
            </service>
        </services>
        <bindings>
            <basicHttpBinding>
                <binding name="basicHttpBinding" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxStringContentLength="2147483647" />
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" proxyCredentialType="None" />
                    </security>
                </binding>
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="WindowsClientOverTcp" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxStringContentLength="2147483647" />
                </binding>
            </netTcpBinding>
            <wsHttpBinding>
                <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                      maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MyServiceBehaviors">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceAuthorization principalPermissionMode="UseWindowsGroups"
                      impersonateCallerForAllOperations="false" />
                    <serviceCredentials />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>
trans by 2020-01-24T14:36:22Z

为何不能在UTC之前的时区中序列化DateTime.MinValue?

WCF REST服务出现问题。 我尝试返回的连线对象具有未设置的某些属性,导致DateTime类型的属性出现DateTime.MinValue。 该服务返回一个空文档(HTTP状态为200 ???)。 当我尝试自己调用JSON序列化时,抛出的异常是:

SerializationException:转换为UTC时大于DateTime.MaxValue或小于DateTime.MinValue的DateTime值不能序列化为JSON。

可以通过在控制台应用程序中运行以下代码来重现该代码:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;

// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);

为什么会这样? 我认为这与我的时区(GMT + 1)有关。 由于DateTime.MinValue是default(DateTime),因此我希望它可以序列化而不会出现问题。

关于如何使我的REST服务运行的任何提示? 我不想更改我的DataContract。

trans by 2020-01-21T10:44:30Z

1 2 3 4 5 6 下一页 共6页