If you aren't using it from inspectors then it should be safe, but if you are not using Remoting or crossing an AppDomain boundary then it is probably simpler to just use a thread static field. Put a ThreadStaticAttribute on a static field and it will be a separate storage location in each thread.
If you are trying to set values in an IDispatchMessageInspector
, for example, then it won't work since those will run in a separate thread from the request. Take a look at OperationContext, which will provide call-specific information about a WCF request. You can add extensions to it that can store custom data by implementing IExtension<OperationContext>
and adding them to the Extensions property. Here is a blog post that describes how to add custom data to the OperationContext.